cpp/gen/emdi12_gen.cpp#

    1//
    2// cpp/gen/emdi12_gen.cpp
    3// Generated by AMC
    4//
    5// Copyright (C) 2008-2013 AlgoEngineering LLC
    6// Copyright (C) 2013-2019 NYSE | Intercontinental Exchange
    7// Copyright (C) 2020-2023 Astra
    8// Copyright (C) 2023 AlgoRND
    9//
   10// This source code constitutes confidential information and trade secrets
   11// of AlgoRND. Unauthorized copying, distribution or sharing of this file,
   12// via any medium, is strictly prohibited.
   13//
   14
   15
   16#include "include/algo.h"  // hard-coded include
   17#include "include/gen/emdi12_gen.h"
   18#include "include/gen/emdi12_gen.inl.h"
   19#include "include/gen/algo_gen.h"
   20#include "include/gen/algo_gen.inl.h"
   21//#pragma endinclude
   22namespace emdi12 { // gen:ns_print_proto
   23    // func:emdi12.InstrmtLegGrp.LegSymbol.ReadStrptrMaybe
   24    static bool          LegSymbol_ReadStrptrMaybe(emdi12::InstrmtLegGrp &parent, algo::strptr in_str) __attribute__((nothrow));
   25    // func:emdi12.InstrmtLegGrp.LegSecurityID.ReadStrptrMaybe
   26    static bool          LegSecurityID_ReadStrptrMaybe(emdi12::InstrmtLegGrp &parent, algo::strptr in_str) __attribute__((nothrow));
   27    // func:emdi12.InstrmtLegGrp.LegSecurityType.ReadStrptrMaybe
   28    static bool          LegSecurityType_ReadStrptrMaybe(emdi12::InstrmtLegGrp &parent, algo::strptr in_str) __attribute__((nothrow));
   29    // func:emdi12.InstrmtLegGrp.LegRatioQty.ReadStrptrMaybe
   30    static bool          LegRatioQty_ReadStrptrMaybe(emdi12::InstrmtLegGrp &parent, algo::strptr in_str) __attribute__((nothrow));
   31    // func:emdi12.InstrmtLegGrp.LegSide.ReadStrptrMaybe
   32    static bool          LegSide_ReadStrptrMaybe(emdi12::InstrmtLegGrp &parent, algo::strptr in_str) __attribute__((nothrow));
   33    // func:emdi12.InstrmtLegGrp.LegPrice.ReadStrptrMaybe
   34    static bool          LegPrice_ReadStrptrMaybe(emdi12::InstrmtLegGrp &parent, algo::strptr in_str) __attribute__((nothrow));
   35    // func:emdi12.ComplexInstrumentUpdate.MsgSeqNum.ReadStrptrMaybe
   36    static bool          MsgSeqNum_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
   37    // func:emdi12.ComplexInstrumentUpdate.SenderCompID.ReadStrptrMaybe
   38    static bool          SenderCompID_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
   39    // func:emdi12.ComplexInstrumentUpdate.SecurityID.ReadStrptrMaybe
   40    static bool          SecurityID_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
   41    // func:emdi12.ComplexInstrumentUpdate.SecurityDesc.ReadStrptrMaybe
   42    static bool          SecurityDesc_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
   43    // func:emdi12.ComplexInstrumentUpdate.SecuritySubType.ReadStrptrMaybe
   44    static bool          SecuritySubType_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
   45    // func:emdi12.ComplexInstrumentUpdate.ProductComplex.ReadStrptrMaybe
   46    static bool          ProductComplex_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
   47    // func:emdi12.ComplexInstrumentUpdate.LegRatioMultiplier.ReadStrptrMaybe
   48    static bool          LegRatioMultiplier_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
   49    // func:emdi12.ComplexInstrumentUpdate.QuantityScalingFactor.ReadStrptrMaybe
   50    static bool          QuantityScalingFactor_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
   51    // func:emdi12.ComplexInstrumentUpdate.LastFragment.ReadStrptrMaybe
   52    static bool          LastFragment_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
   53    // func:emdi12.ComplexInstrumentUpdate.MarketSegmentGrp1.ReadStrptrMaybe
   54    static bool          MarketSegmentGrp1_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
   55    // func:emdi12.ComplexInstrumentUpdate.TransactTime.ReadStrptrMaybe
   56    static bool          TransactTime_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
   57    // func:emdi12.CrossRequestSideGrp.Side.ReadStrptrMaybe
   58    static bool          Side_ReadStrptrMaybe(emdi12::CrossRequestSideGrp &parent, algo::strptr in_str) __attribute__((nothrow));
   59    // func:emdi12.CrossRequest.MsgSeqNum.ReadStrptrMaybe
   60    static bool          MsgSeqNum_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) __attribute__((nothrow));
   61    // func:emdi12.CrossRequest.SenderCompID.ReadStrptrMaybe
   62    static bool          SenderCompID_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) __attribute__((nothrow));
   63    // func:emdi12.CrossRequest.MarketSegmentID.ReadStrptrMaybe
   64    static bool          MarketSegmentID_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) __attribute__((nothrow));
   65    // func:emdi12.CrossRequest.SecurityID.ReadStrptrMaybe
   66    static bool          SecurityID_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) __attribute__((nothrow));
   67    // func:emdi12.CrossRequest.OrderQty.ReadStrptrMaybe
   68    static bool          OrderQty_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) __attribute__((nothrow));
   69    // func:emdi12.CrossRequest.CrossRequestType.ReadStrptrMaybe
   70    static bool          CrossRequestType_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) __attribute__((nothrow));
   71    // func:emdi12.CrossRequest.CrossRequestSideGrp.ReadStrptrMaybe
   72    static bool          CrossRequestSideGrp_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) __attribute__((nothrow));
   73    // func:emdi12.CrossRequest.MDEntryPx.ReadStrptrMaybe
   74    static bool          MDEntryPx_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) __attribute__((nothrow));
   75    // func:emdi12.CrossRequest.TransactTime.ReadStrptrMaybe
   76    static bool          TransactTime_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) __attribute__((nothrow));
   77    // func:emdi12.TradeConditionSet.U.ReadStrptrMaybe
   78    static bool          U_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) __attribute__((nothrow));
   79    // func:emdi12.TradeConditionSet.R.ReadStrptrMaybe
   80    static bool          R_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) __attribute__((nothrow));
   81    // func:emdi12.TradeConditionSet.AX.ReadStrptrMaybe
   82    static bool          AX_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) __attribute__((nothrow));
   83    // func:emdi12.TradeConditionSet.AY.ReadStrptrMaybe
   84    static bool          AY_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) __attribute__((nothrow));
   85    // func:emdi12.TradeConditionSet.AJ.ReadStrptrMaybe
   86    static bool          AJ_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) __attribute__((nothrow));
   87    // func:emdi12.TradeConditionSet.AW.ReadStrptrMaybe
   88    static bool          AW_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) __attribute__((nothrow));
   89    // func:emdi12.TradeConditionSet.k.ReadStrptrMaybe
   90    static bool          k_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) __attribute__((nothrow));
   91    // func:emdi12.TradeConditionSet.BD.ReadStrptrMaybe
   92    static bool          BD_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) __attribute__((nothrow));
   93    // func:emdi12.TradeConditionSet.a.ReadStrptrMaybe
   94    static bool          a_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) __attribute__((nothrow));
   95    // func:emdi12.TradeConditionSet.BC.ReadStrptrMaybe
   96    static bool          BC_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) __attribute__((nothrow));
   97    // func:emdi12.TradeConditionSet.SA.ReadStrptrMaybe
   98    static bool          SA_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) __attribute__((nothrow));
   99    // func:emdi12.TradeConditionSet.TC.ReadStrptrMaybe
  100    static bool          TC_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) __attribute__((nothrow));
  101    // func:emdi12.TradeConditionSet.XR.ReadStrptrMaybe
  102    static bool          XR_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) __attribute__((nothrow));
  103    // func:emdi12.TradeEntryGrp.TrdType.ReadStrptrMaybe
  104    static bool          TrdType_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  105    // func:emdi12.TradeEntryGrp.AlgorithmicTradeIndicator.ReadStrptrMaybe
  106    static bool          AlgorithmicTradeIndicator_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  107    // func:emdi12.TradeEntryGrp.TradeCondition.ReadStrptrMaybe
  108    static bool          TradeCondition_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  109    // func:emdi12.TradeEntryGrp.MultiLegReportingType.ReadStrptrMaybe
  110    static bool          MultiLegReportingType_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  111    // func:emdi12.TradeEntryGrp.MultiLegPriceModel.ReadStrptrMaybe
  112    static bool          MultiLegPriceModel_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  113    // func:emdi12.TradeEntryGrp.AggressorTime.ReadStrptrMaybe
  114    static bool          AggressorTime_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  115    // func:emdi12.TradeEntryGrp.RequestTime.ReadStrptrMaybe
  116    static bool          RequestTime_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  117    // func:emdi12.TradeEntryGrp.AggressorSide.ReadStrptrMaybe
  118    static bool          AggressorSide_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  119    // func:emdi12.TradeEntryGrp.NumberOfBuyOrders.ReadStrptrMaybe
  120    static bool          NumberOfBuyOrders_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  121    // func:emdi12.TradeEntryGrp.NumberOfSellOrders.ReadStrptrMaybe
  122    static bool          NumberOfSellOrders_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  123    // func:emdi12.TradeEntryGrp.TotalNumOfTrades.ReadStrptrMaybe
  124    static bool          TotalNumOfTrades_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  125    // func:emdi12.TradeEntryGrp.RestingCxlQty.ReadStrptrMaybe
  126    static bool          RestingCxlQty_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  127    // func:emdi12.TradeEntryGrp.MDEntryID.ReadStrptrMaybe
  128    static bool          MDEntryID_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  129    // func:emdi12.TradeEntryGrp.NonDisclosedTradeVolume.ReadStrptrMaybe
  130    static bool          NonDisclosedTradeVolume_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  131    // func:emdi12.MDIncGrp1.MDOriginType.ReadStrptrMaybe
  132    static bool          MDOriginType_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) __attribute__((nothrow));
  133    // func:emdi12.MDIncGrp1.MDUpdateAction.ReadStrptrMaybe
  134    static bool          MDUpdateAction_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) __attribute__((nothrow));
  135    // func:emdi12.MDIncGrp1.MDEntryType.ReadStrptrMaybe
  136    static bool          MDEntryType_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) __attribute__((nothrow));
  137    // func:emdi12.MDIncGrp1.SecurityID.ReadStrptrMaybe
  138    static bool          SecurityID_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) __attribute__((nothrow));
  139    // func:emdi12.MDIncGrp1.MDEntryPx.ReadStrptrMaybe
  140    static bool          MDEntryPx_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) __attribute__((nothrow));
  141    // func:emdi12.MDIncGrp1.MDEntrySize.ReadStrptrMaybe
  142    static bool          MDEntrySize_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) __attribute__((nothrow));
  143    // func:emdi12.MDIncGrp1.NumberOfOrders.ReadStrptrMaybe
  144    static bool          NumberOfOrders_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) __attribute__((nothrow));
  145    // func:emdi12.MDIncGrp1.MDPriceLevel.ReadStrptrMaybe
  146    static bool          MDPriceLevel_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) __attribute__((nothrow));
  147    // func:emdi12.MDIncGrp1.MDEntryTime.ReadStrptrMaybe
  148    static bool          MDEntryTime_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) __attribute__((nothrow));
  149    // func:emdi12.MDIncGrp1.PotentialSecurityTradingEvent.ReadStrptrMaybe
  150    static bool          PotentialSecurityTradingEvent_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) __attribute__((nothrow));
  151    // func:emdi12.MDIncGrp1.QuoteCondition.ReadStrptrMaybe
  152    static bool          QuoteCondition_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) __attribute__((nothrow));
  153    // func:emdi12.MDIncGrp1.TradeEntryGrp.ReadStrptrMaybe
  154    static bool          TradeEntryGrp_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) __attribute__((nothrow));
  155    // func:emdi12.MDSshGrp.MDOriginType.ReadStrptrMaybe
  156    static bool          MDOriginType_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  157    // func:emdi12.MDSshGrp.MDEntryType.ReadStrptrMaybe
  158    static bool          MDEntryType_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  159    // func:emdi12.MDSshGrp.MDBookType.ReadStrptrMaybe
  160    static bool          MDBookType_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  161    // func:emdi12.MDSshGrp.MDSubBookType.ReadStrptrMaybe
  162    static bool          MDSubBookType_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  163    // func:emdi12.MDSshGrp.TrdType.ReadStrptrMaybe
  164    static bool          TrdType_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  165    // func:emdi12.MDSshGrp.TradingSessionID.ReadStrptrMaybe
  166    static bool          TradingSessionID_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  167    // func:emdi12.MDSshGrp.TradingSessionSubID.ReadStrptrMaybe
  168    static bool          TradingSessionSubID_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  169    // func:emdi12.MDSshGrp.TESTradSesStatus.ReadStrptrMaybe
  170    static bool          TESTradSesStatus_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  171    // func:emdi12.MDSshGrp.SecurityTradingStatus.ReadStrptrMaybe
  172    static bool          SecurityTradingStatus_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  173    // func:emdi12.MDSshGrp.MarketCondition.ReadStrptrMaybe
  174    static bool          MarketCondition_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  175    // func:emdi12.MDSshGrp.FastMarketIndicator.ReadStrptrMaybe
  176    static bool          FastMarketIndicator_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  177    // func:emdi12.MDSshGrp.SecurityTradingEvent.ReadStrptrMaybe
  178    static bool          SecurityTradingEvent_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  179    // func:emdi12.MDSshGrp.PotentialSecurityTradingEvent.ReadStrptrMaybe
  180    static bool          PotentialSecurityTradingEvent_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  181    // func:emdi12.MDSshGrp.SoldOutIndicator.ReadStrptrMaybe
  182    static bool          SoldOutIndicator_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  183    // func:emdi12.MDSshGrp.HighPx.ReadStrptrMaybe
  184    static bool          HighPx_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  185    // func:emdi12.MDSshGrp.LowPx.ReadStrptrMaybe
  186    static bool          LowPx_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  187    // func:emdi12.MDSshGrp.TradeCondition.ReadStrptrMaybe
  188    static bool          TradeCondition_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  189    // func:emdi12.MDSshGrp.MultiLegReportingType.ReadStrptrMaybe
  190    static bool          MultiLegReportingType_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  191    // func:emdi12.MDSshGrp.MultiLegPriceModel.ReadStrptrMaybe
  192    static bool          MultiLegPriceModel_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  193    // func:emdi12.MDSshGrp.QuoteCondition.ReadStrptrMaybe
  194    static bool          QuoteCondition_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  195    // func:emdi12.MDSshGrp.MDEntryPx.ReadStrptrMaybe
  196    static bool          MDEntryPx_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  197    // func:emdi12.MDSshGrp.MDEntrySize.ReadStrptrMaybe
  198    static bool          MDEntrySize_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  199    // func:emdi12.MDSshGrp.NumberOfOrders.ReadStrptrMaybe
  200    static bool          NumberOfOrders_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  201    // func:emdi12.MDSshGrp.MDPriceLevel.ReadStrptrMaybe
  202    static bool          MDPriceLevel_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  203    // func:emdi12.MDSshGrp.MDEntryTime.ReadStrptrMaybe
  204    static bool          MDEntryTime_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  205    // func:emdi12.MDSshGrp.NonDisclosedTradeVolume.ReadStrptrMaybe
  206    static bool          NonDisclosedTradeVolume_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  207    // func:emdi12.MDSshGrp.TotalNumOfTrades.ReadStrptrMaybe
  208    static bool          TotalNumOfTrades_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  209    // func:emdi12.DepthSnapshot.MsgSeqNum.ReadStrptrMaybe
  210    static bool          MsgSeqNum_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) __attribute__((nothrow));
  211    // func:emdi12.DepthSnapshot.SenderCompID.ReadStrptrMaybe
  212    static bool          SenderCompID_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) __attribute__((nothrow));
  213    // func:emdi12.DepthSnapshot.LastMsgSeqNumProcessed.ReadStrptrMaybe
  214    static bool          LastMsgSeqNumProcessed_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) __attribute__((nothrow));
  215    // func:emdi12.DepthSnapshot.RefreshIndicator.ReadStrptrMaybe
  216    static bool          RefreshIndicator_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) __attribute__((nothrow));
  217    // func:emdi12.DepthSnapshot.MarketSegmentID.ReadStrptrMaybe
  218    static bool          MarketSegmentID_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) __attribute__((nothrow));
  219    // func:emdi12.DepthSnapshot.SecurityID.ReadStrptrMaybe
  220    static bool          SecurityID_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) __attribute__((nothrow));
  221    // func:emdi12.DepthSnapshot.ProductComplex.ReadStrptrMaybe
  222    static bool          ProductComplex_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) __attribute__((nothrow));
  223    // func:emdi12.DepthSnapshot.SecurityStatus.ReadStrptrMaybe
  224    static bool          SecurityStatus_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) __attribute__((nothrow));
  225    // func:emdi12.DepthSnapshot.TESSecurityStatus.ReadStrptrMaybe
  226    static bool          TESSecurityStatus_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) __attribute__((nothrow));
  227    // func:emdi12.DepthSnapshot.LastUpdateTime.ReadStrptrMaybe
  228    static bool          LastUpdateTime_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) __attribute__((nothrow));
  229    // func:emdi12.FlexibleInstrumentUpdate.MsgSeqNum.ReadStrptrMaybe
  230    static bool          MsgSeqNum_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
  231    // func:emdi12.FlexibleInstrumentUpdate.SenderCompID.ReadStrptrMaybe
  232    static bool          SenderCompID_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
  233    // func:emdi12.FlexibleInstrumentUpdate.SecurityID.ReadStrptrMaybe
  234    static bool          SecurityID_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
  235    // func:emdi12.FlexibleInstrumentUpdate.SecurityDesc.ReadStrptrMaybe
  236    static bool          SecurityDesc_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
  237    // func:emdi12.FlexibleInstrumentUpdate.SecurityType.ReadStrptrMaybe
  238    static bool          SecurityType_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
  239    // func:emdi12.FlexibleInstrumentUpdate.ProductComplex.ReadStrptrMaybe
  240    static bool          ProductComplex_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
  241    // func:emdi12.FlexibleInstrumentUpdate.MaturityDate.ReadStrptrMaybe
  242    static bool          MaturityDate_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
  243    // func:emdi12.FlexibleInstrumentUpdate.StrikePrice.ReadStrptrMaybe
  244    static bool          StrikePrice_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
  245    // func:emdi12.FlexibleInstrumentUpdate.PutOrCall.ReadStrptrMaybe
  246    static bool          PutOrCall_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
  247    // func:emdi12.FlexibleInstrumentUpdate.OptAttribute.ReadStrptrMaybe
  248    static bool          OptAttribute_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
  249    // func:emdi12.FlexibleInstrumentUpdate.ExerciseStyle.ReadStrptrMaybe
  250    static bool          ExerciseStyle_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
  251    // func:emdi12.FlexibleInstrumentUpdate.SettlMethod.ReadStrptrMaybe
  252    static bool          SettlMethod_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
  253    // func:emdi12.FlexibleInstrumentUpdate.MarketSegmentGrp2.ReadStrptrMaybe
  254    static bool          MarketSegmentGrp2_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
  255    // func:emdi12.FlexibleInstrumentUpdate.TransactTime.ReadStrptrMaybe
  256    static bool          TransactTime_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
  257    // func:emdi12.InstrumentStateChange.MsgSeqNum.ReadStrptrMaybe
  258    static bool          MsgSeqNum_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  259    // func:emdi12.InstrumentStateChange.SenderCompID.ReadStrptrMaybe
  260    static bool          SenderCompID_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  261    // func:emdi12.InstrumentStateChange.MarketSegmentID.ReadStrptrMaybe
  262    static bool          MarketSegmentID_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  263    // func:emdi12.InstrumentStateChange.SecurityID.ReadStrptrMaybe
  264    static bool          SecurityID_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  265    // func:emdi12.InstrumentStateChange.SecurityStatus.ReadStrptrMaybe
  266    static bool          SecurityStatus_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  267    // func:emdi12.InstrumentStateChange.SecurityTradingStatus.ReadStrptrMaybe
  268    static bool          SecurityTradingStatus_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  269    // func:emdi12.InstrumentStateChange.MarketCondition.ReadStrptrMaybe
  270    static bool          MarketCondition_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  271    // func:emdi12.InstrumentStateChange.FastMarketIndicator.ReadStrptrMaybe
  272    static bool          FastMarketIndicator_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  273    // func:emdi12.InstrumentStateChange.SecurityTradingEvent.ReadStrptrMaybe
  274    static bool          SecurityTradingEvent_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  275    // func:emdi12.InstrumentStateChange.SoldOutIndicator.ReadStrptrMaybe
  276    static bool          SoldOutIndicator_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  277    // func:emdi12.InstrumentStateChange.HighPx.ReadStrptrMaybe
  278    static bool          HighPx_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  279    // func:emdi12.InstrumentStateChange.LowPx.ReadStrptrMaybe
  280    static bool          LowPx_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  281    // func:emdi12.InstrumentStateChange.TransactTime.ReadStrptrMaybe
  282    static bool          TransactTime_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  283    // func:emdi12.InstrumentStateChange.TESSecurityStatus.ReadStrptrMaybe
  284    static bool          TESSecurityStatus_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  285    // func:emdi12.MDIncGrp2.MDUpdateAction.ReadStrptrMaybe
  286    static bool          MDUpdateAction_ReadStrptrMaybe(emdi12::MDIncGrp2 &parent, algo::strptr in_str) __attribute__((nothrow));
  287    // func:emdi12.MDIncGrp2.MDEntryType.ReadStrptrMaybe
  288    static bool          MDEntryType_ReadStrptrMaybe(emdi12::MDIncGrp2 &parent, algo::strptr in_str) __attribute__((nothrow));
  289    // func:emdi12.MDIncGrp2.MDSubBookType.ReadStrptrMaybe
  290    static bool          MDSubBookType_ReadStrptrMaybe(emdi12::MDIncGrp2 &parent, algo::strptr in_str) __attribute__((nothrow));
  291    // func:emdi12.MDIncGrp2.SecurityID.ReadStrptrMaybe
  292    static bool          SecurityID_ReadStrptrMaybe(emdi12::MDIncGrp2 &parent, algo::strptr in_str) __attribute__((nothrow));
  293    // func:emdi12.MDIncGrp2.MDEntryPx.ReadStrptrMaybe
  294    static bool          MDEntryPx_ReadStrptrMaybe(emdi12::MDIncGrp2 &parent, algo::strptr in_str) __attribute__((nothrow));
  295    // func:emdi12.MDIncGrp2.MDEntrySize.ReadStrptrMaybe
  296    static bool          MDEntrySize_ReadStrptrMaybe(emdi12::MDIncGrp2 &parent, algo::strptr in_str) __attribute__((nothrow));
  297    // func:emdi12.MDIncGrp2.MDEntryTime.ReadStrptrMaybe
  298    static bool          MDEntryTime_ReadStrptrMaybe(emdi12::MDIncGrp2 &parent, algo::strptr in_str) __attribute__((nothrow));
  299    // func:emdi12.MDIncGrp2.QuoteCondition.ReadStrptrMaybe
  300    static bool          QuoteCondition_ReadStrptrMaybe(emdi12::MDIncGrp2 &parent, algo::strptr in_str) __attribute__((nothrow));
  301    // func:emdi12.SecMassStatGrp.SecurityID.ReadStrptrMaybe
  302    static bool          SecurityID_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  303    // func:emdi12.SecMassStatGrp.SecurityStatus.ReadStrptrMaybe
  304    static bool          SecurityStatus_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  305    // func:emdi12.SecMassStatGrp.SecurityTradingStatus.ReadStrptrMaybe
  306    static bool          SecurityTradingStatus_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  307    // func:emdi12.SecMassStatGrp.MarketCondition.ReadStrptrMaybe
  308    static bool          MarketCondition_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  309    // func:emdi12.SecMassStatGrp.SecurityTradingEvent.ReadStrptrMaybe
  310    static bool          SecurityTradingEvent_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  311    // func:emdi12.SecMassStatGrp.SoldOutIndicator.ReadStrptrMaybe
  312    static bool          SoldOutIndicator_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  313    // func:emdi12.SecMassStatGrp.HighPx.ReadStrptrMaybe
  314    static bool          HighPx_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  315    // func:emdi12.SecMassStatGrp.LowPx.ReadStrptrMaybe
  316    static bool          LowPx_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  317    // func:emdi12.SecMassStatGrp.TESSecurityStatus.ReadStrptrMaybe
  318    static bool          TESSecurityStatus_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  319    // func:emdi12.MassInstrumentStateChange.MsgSeqNum.ReadStrptrMaybe
  320    static bool          MsgSeqNum_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  321    // func:emdi12.MassInstrumentStateChange.SenderCompID.ReadStrptrMaybe
  322    static bool          SenderCompID_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  323    // func:emdi12.MassInstrumentStateChange.MarketSegmentID.ReadStrptrMaybe
  324    static bool          MarketSegmentID_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  325    // func:emdi12.MassInstrumentStateChange.InstrumentScopeProductComplex.ReadStrptrMaybe
  326    static bool          InstrumentScopeProductComplex_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  327    // func:emdi12.MassInstrumentStateChange.SecurityMassStatus.ReadStrptrMaybe
  328    static bool          SecurityMassStatus_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  329    // func:emdi12.MassInstrumentStateChange.SecurityMassTradingStatus.ReadStrptrMaybe
  330    static bool          SecurityMassTradingStatus_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  331    // func:emdi12.MassInstrumentStateChange.MassMarketCondition.ReadStrptrMaybe
  332    static bool          MassMarketCondition_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  333    // func:emdi12.MassInstrumentStateChange.FastMarketIndicator.ReadStrptrMaybe
  334    static bool          FastMarketIndicator_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  335    // func:emdi12.MassInstrumentStateChange.SecurityMassTradingEvent.ReadStrptrMaybe
  336    static bool          SecurityMassTradingEvent_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  337    // func:emdi12.MassInstrumentStateChange.MassSoldOutIndicator.ReadStrptrMaybe
  338    static bool          MassSoldOutIndicator_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  339    // func:emdi12.MassInstrumentStateChange.TransactTime.ReadStrptrMaybe
  340    static bool          TransactTime_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  341    // func:emdi12.MassInstrumentStateChange.TESSecurityMassStatus.ReadStrptrMaybe
  342    static bool          TESSecurityMassStatus_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  343    // func:emdi12.MassInstrumentStateChange.LastFragment.ReadStrptrMaybe
  344    static bool          LastFragment_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  345    // func:emdi12.ProductStateChange.MsgSeqNum.ReadStrptrMaybe
  346    static bool          MsgSeqNum_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  347    // func:emdi12.ProductStateChange.SenderCompID.ReadStrptrMaybe
  348    static bool          SenderCompID_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  349    // func:emdi12.ProductStateChange.MarketSegmentID.ReadStrptrMaybe
  350    static bool          MarketSegmentID_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  351    // func:emdi12.ProductStateChange.TradingSessionID.ReadStrptrMaybe
  352    static bool          TradingSessionID_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  353    // func:emdi12.ProductStateChange.TradingSessionSubID.ReadStrptrMaybe
  354    static bool          TradingSessionSubID_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  355    // func:emdi12.ProductStateChange.TradSesStatus.ReadStrptrMaybe
  356    static bool          TradSesStatus_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  357    // func:emdi12.ProductStateChange.MarketCondition.ReadStrptrMaybe
  358    static bool          MarketCondition_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  359    // func:emdi12.ProductStateChange.FastMarketIndicator.ReadStrptrMaybe
  360    static bool          FastMarketIndicator_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  361    // func:emdi12.ProductStateChange.TransactTime.ReadStrptrMaybe
  362    static bool          TransactTime_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  363    // func:emdi12.ProductStateChange.TESTradSesStatus.ReadStrptrMaybe
  364    static bool          TESTradSesStatus_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
  365    // func:emdi12.QuotReqGrp.SecurityID.ReadStrptrMaybe
  366    static bool          SecurityID_ReadStrptrMaybe(emdi12::QuotReqGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  367    // func:emdi12.QuotReqGrp.Side.ReadStrptrMaybe
  368    static bool          Side_ReadStrptrMaybe(emdi12::QuotReqGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  369    // func:emdi12.QuotReqGrp.OrderQty.ReadStrptrMaybe
  370    static bool          OrderQty_ReadStrptrMaybe(emdi12::QuotReqGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  371    // func:emdi12.QuotReqGrp.TransactTime.ReadStrptrMaybe
  372    static bool          TransactTime_ReadStrptrMaybe(emdi12::QuotReqGrp &parent, algo::strptr in_str) __attribute__((nothrow));
  373    // func:emdi12...SizeCheck
  374    static void          SizeCheck();
  375} // gen:ns_print_proto
  376
  377// --- emdi12.AlgorithmicTradeIndicator.value.ToCstr
  378// Convert numeric value of field to one of predefined string constants.
  379// If string is found, return a static C string. Otherwise, return NULL.
  380const char* emdi12::value_ToCstr(const emdi12::AlgorithmicTradeIndicator& parent) {
  381    const char *ret = NULL;
  382    switch(value_GetEnum(parent)) {
  383        case emdi12_AlgorithmicTradeIndicator_1: ret = "1";  break;
  384    }
  385    return ret;
  386}
  387
  388// --- emdi12.AlgorithmicTradeIndicator.value.Print
  389// Convert value to a string. First, attempt conversion to a known string.
  390// If no string matches, print value as a numeric value.
  391void emdi12::value_Print(const emdi12::AlgorithmicTradeIndicator& parent, algo::cstring &lhs) {
  392    const char *strval = value_ToCstr(parent);
  393    if (strval) {
  394        lhs << strval;
  395    } else {
  396        lhs << parent.value;
  397    }
  398}
  399
  400// --- emdi12.AlgorithmicTradeIndicator.value.SetStrptrMaybe
  401// Convert string to field.
  402// If the string is invalid, do not modify field and return false.
  403// In case of success, return true
  404bool emdi12::value_SetStrptrMaybe(emdi12::AlgorithmicTradeIndicator& parent, algo::strptr rhs) {
  405    bool ret = false;
  406    switch (elems_N(rhs)) {
  407        case 1: {
  408            switch (u64(rhs[0])) {
  409                case '1': {
  410                    value_SetEnum(parent,emdi12_AlgorithmicTradeIndicator_1); ret = true; break;
  411                }
  412            }
  413            break;
  414        }
  415    }
  416    return ret;
  417}
  418
  419// --- emdi12.AlgorithmicTradeIndicator.value.SetStrptr
  420// Convert string to field.
  421// If the string is invalid, set numeric value to DFLT
  422void emdi12::value_SetStrptr(emdi12::AlgorithmicTradeIndicator& parent, algo::strptr rhs, emdi12_AlgorithmicTradeIndicatorEnum dflt) {
  423    if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
  424}
  425
  426// --- emdi12.AlgorithmicTradeIndicator.value.ReadStrptrMaybe
  427// Convert string to field. Return success value
  428bool emdi12::value_ReadStrptrMaybe(emdi12::AlgorithmicTradeIndicator& parent, algo::strptr rhs) {
  429    bool retval = false;
  430    retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
  431    if (!retval) { // didn't work? try reading as underlying type
  432        retval = u32_ReadStrptrMaybe(parent.value,rhs);
  433    }
  434    return retval;
  435}
  436
  437// --- emdi12.AlgorithmicTradeIndicator..ReadStrptrMaybe
  438// Read fields of emdi12::AlgorithmicTradeIndicator from an ascii string.
  439// The format of the string is the format of the emdi12::AlgorithmicTradeIndicator's only field
  440bool emdi12::AlgorithmicTradeIndicator_ReadStrptrMaybe(emdi12::AlgorithmicTradeIndicator &parent, algo::strptr in_str) {
  441    bool retval = true;
  442    retval = retval && value_ReadStrptrMaybe(parent, in_str);
  443    return retval;
  444}
  445
  446// --- emdi12.AlgorithmicTradeIndicator..Print
  447// print string representation of ROW to string STR
  448// cfmt:emdi12.AlgorithmicTradeIndicator.String  printfmt:Raw
  449void emdi12::AlgorithmicTradeIndicator_Print(emdi12::AlgorithmicTradeIndicator row, algo::cstring& str) {
  450    emdi12::value_Print(row, str);
  451}
  452
  453// --- emdi12.Beacon.base.CopyOut
  454// Copy fields out of row
  455void emdi12::parent_CopyOut(emdi12::Beacon &row, emdi12::TemplateHeader &out) {
  456    // length: field value is computed
  457    // id: field value is computed
  458    (void)row;//only to avoid -Wunused-parameter
  459    (void)out;//only to avoid -Wunused-parameter
  460}
  461
  462// --- emdi12.Beacon..ReadFieldMaybe
  463bool emdi12::Beacon_ReadFieldMaybe(emdi12::Beacon& parent, algo::strptr field, algo::strptr strval) {
  464    bool retval = true;
  465    emdi12::FieldId field_id;
  466    (void)value_SetStrptrMaybe(field_id,field);
  467    switch(field_id) {
  468        case emdi12_FieldId_base: {
  469            retval = false;
  470            break;
  471        }
  472        case emdi12_FieldId_length: {
  473            retval = false;
  474            break;
  475        }
  476        case emdi12_FieldId_id: {
  477            retval = false;
  478            break;
  479        }
  480        case emdi12_FieldId_MsgType: {
  481            retval = true;
  482            break;
  483        }
  484        case emdi12_FieldId_SenderCompID: {
  485            retval = u32_ReadStrptrMaybe(parent.SenderCompID, strval);
  486            break;
  487        }
  488        case emdi12_FieldId_SenderSubID: {
  489            retval = u32_ReadStrptrMaybe(parent.SenderSubID, strval);
  490            break;
  491        }
  492        case emdi12_FieldId_LastMsgSeqNumProcessed: {
  493            retval = u32_ReadStrptrMaybe(parent.LastMsgSeqNumProcessed, strval);
  494            break;
  495        }
  496        default: break;
  497    }
  498    if (!retval) {
  499        algo_lib::AppendErrtext("attr",field);
  500    }
  501    return retval;
  502}
  503
  504// --- emdi12.Beacon..ReadStrptrMaybe
  505// Read fields of emdi12::Beacon from an ascii string.
  506// The format of the string is an ssim Tuple
  507bool emdi12::Beacon_ReadStrptrMaybe(emdi12::Beacon &parent, algo::strptr in_str) {
  508    bool retval = true;
  509    retval = algo::StripTypeTag(in_str, "emdi12.Beacon");
  510    ind_beg(algo::Attr_curs, attr, in_str) {
  511        retval = retval && Beacon_ReadFieldMaybe(parent, attr.name, attr.value);
  512    }ind_end;
  513    return retval;
  514}
  515
  516// --- emdi12.Beacon..Print
  517// print string representation of ROW to string STR
  518// cfmt:emdi12.Beacon.String  printfmt:Tuple
  519void emdi12::Beacon_Print(emdi12::Beacon& row, algo::cstring& str) {
  520    algo::tempstr temp;
  521    str << "emdi12.Beacon";
  522
  523    algo::strptr_Print(MsgType_Get(row), temp);
  524    PrintAttrSpaceReset(str,"MsgType", temp);
  525
  526    u32_Print(row.SenderCompID, temp);
  527    PrintAttrSpaceReset(str,"SenderCompID", temp);
  528
  529    u32_Print(row.SenderSubID, temp);
  530    PrintAttrSpaceReset(str,"SenderSubID", temp);
  531
  532    u32_Print(row.LastMsgSeqNumProcessed, temp);
  533    PrintAttrSpaceReset(str,"LastMsgSeqNumProcessed", temp);
  534}
  535
  536// --- emdi12.Beacon..FastEncode
  537void emdi12::Beacon_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::Beacon& parent) {
  538    int index = ary_N(buf);
  539    u64 pmap(0);
  540    if (!tid_AssignedQ(state) || parent.id != state.tid) {
  541        lib_fast::EncodeUnsigned(buf,parent.id,false);
  542        lib_fast::SetPmapBit(pmap,0);
  543    }
  544    tid_SetAssigned(state);
  545    state.tid = parent.id;
  546    // MsgType string constant mandatory
  547    // SenderCompID unsigned copy mandatory
  548    if (!SenderCompID_AssignedQ(state) || parent.SenderCompID != state.SenderCompID) {
  549        lib_fast::EncodeUnsigned(buf,parent.SenderCompID,false);
  550        lib_fast::SetPmapBit(pmap,1);
  551    }
  552    state.SenderCompID = parent.SenderCompID;
  553    SenderCompID_SetAssigned(state);
  554    // SenderSubID unsigned copy mandatory
  555    if (!SenderSubID_AssignedQ(state) || parent.SenderSubID != state.SenderSubID) {
  556        lib_fast::EncodeUnsigned(buf,parent.SenderSubID,false);
  557        lib_fast::SetPmapBit(pmap,2);
  558    }
  559    state.SenderSubID = parent.SenderSubID;
  560    SenderSubID_SetAssigned(state);
  561    // LastMsgSeqNumProcessed unsigned none mandatory
  562    lib_fast::EncodeUnsigned(buf,parent.LastMsgSeqNumProcessed,false);
  563    lib_fast::InsertPmap(buf,index,pmap);
  564}
  565
  566// --- emdi12.Beacon..FastDecode
  567bool emdi12::Beacon_FastDecode(algo::memptr& from, u64 pmap, FastState& state, emdi12::Beacon& parent) {
  568    bool ok = true;
  569    // MsgType string constant mandatory
  570    if (ok) {
  571    }
  572    // SenderCompID unsigned copy mandatory
  573    if (ok) {
  574        bool prs = lib_fast::GetPmapBit(pmap,1);
  575        if (prs) {
  576            ok = lib_fast::DecodeUnsigned(from,parent.SenderCompID,false);
  577            if (!ok) {
  578                state.error << "emdi12.Beacon.SenderCompID: bad Unsigned" << eol;
  579            }
  580        } else if (SenderCompID_AssignedQ(state)) {
  581            parent.SenderCompID = state.SenderCompID;
  582        } else {
  583            ok = false;
  584            state.error << "emdi12.Beacon.SenderCompID: copy operator: previous value unassigned" << eol;
  585        }
  586        SenderCompID_SetAssigned(state);
  587        state.SenderCompID = parent.SenderCompID;
  588    }
  589    // SenderSubID unsigned copy mandatory
  590    if (ok) {
  591        bool prs = lib_fast::GetPmapBit(pmap,2);
  592        if (prs) {
  593            ok = lib_fast::DecodeUnsigned(from,parent.SenderSubID,false);
  594            if (!ok) {
  595                state.error << "emdi12.Beacon.SenderSubID: bad Unsigned" << eol;
  596            }
  597        } else if (SenderSubID_AssignedQ(state)) {
  598            parent.SenderSubID = state.SenderSubID;
  599        } else {
  600            ok = false;
  601            state.error << "emdi12.Beacon.SenderSubID: copy operator: previous value unassigned" << eol;
  602        }
  603        SenderSubID_SetAssigned(state);
  604        state.SenderSubID = parent.SenderSubID;
  605    }
  606    // LastMsgSeqNumProcessed unsigned none mandatory
  607    if (ok) {
  608        ok = lib_fast::DecodeUnsigned(from,parent.LastMsgSeqNumProcessed,false);
  609        if (!ok) {
  610            state.error << "emdi12.Beacon.LastMsgSeqNumProcessed: bad Unsigned" << eol;
  611        }
  612    }
  613    return ok;
  614}
  615
  616// --- emdi12.Beacon..FixEncode
  617void emdi12::Beacon_FixEncode(cstring& buf, emdi12::Beacon& parent, char soh) {
  618    buf << "35=" << MsgType_Get(parent) << soh;
  619    buf << "49=" << parent.SenderCompID << soh;
  620    buf << "50=" << parent.SenderSubID << soh;
  621    buf << "369=" << parent.LastMsgSeqNumProcessed << soh;
  622}
  623
  624// --- emdi12.SecurityType.value.ToCstr
  625// Convert numeric value of field to one of predefined string constants.
  626// If string is found, return a static C string. Otherwise, return NULL.
  627const char* emdi12::value_ToCstr(const emdi12::SecurityType& parent) {
  628    const char *ret = NULL;
  629    switch(value_GetEnum(parent)) {
  630        case emdi12_SecurityType_OPT       : ret = "OPT";  break;
  631        case emdi12_SecurityType_FUT       : ret = "FUT";  break;
  632        case emdi12_SecurityType_MLEG      : ret = "MLEG";  break;
  633        case emdi12_SecurityType_VAR       : ret = "VAR";  break;
  634        case emdi12_SecurityType_TRF       : ret = "TRF";  break;
  635        case emdi12_SecurityType_CS        : ret = "CS";  break;
  636        case emdi12_SecurityType_BOND      : ret = "BOND";  break;
  637        case emdi12_SecurityType_TARP      : ret = "TARP";  break;
  638        case emdi12_SecurityType_ETF       : ret = "ETF";  break;
  639        case emdi12_SecurityType_ETC       : ret = "ETC";  break;
  640        case emdi12_SecurityType_ETN       : ret = "ETN";  break;
  641        case emdi12_SecurityType_WAR       : ret = "WAR";  break;
  642        case emdi12_SecurityType_OTHER     : ret = "OTHER";  break;
  643        case emdi12_SecurityType_SR        : ret = "SR";  break;
  644        case emdi12_SecurityType_FUN       : ret = "FUN";  break;
  645        case emdi12_SecurityType_DA        : ret = "DA";  break;
  646    }
  647    return ret;
  648}
  649
  650// --- emdi12.SecurityType.value.Print
  651// Convert value to a string. First, attempt conversion to a known string.
  652// If no string matches, print value as a numeric value.
  653void emdi12::value_Print(const emdi12::SecurityType& parent, algo::cstring &lhs) {
  654    const char *strval = value_ToCstr(parent);
  655    if (strval) {
  656        lhs << strval;
  657    } else {
  658        lhs << parent.value;
  659    }
  660}
  661
  662// --- emdi12.SecurityType.value.SetStrptrMaybe
  663// Convert string to field.
  664// If the string is invalid, do not modify field and return false.
  665// In case of success, return true
  666bool emdi12::value_SetStrptrMaybe(emdi12::SecurityType& parent, algo::strptr rhs) {
  667    bool ret = false;
  668    switch (elems_N(rhs)) {
  669        case 2: {
  670            switch (u64(algo::ReadLE16(rhs.elems))) {
  671                case LE_STR2('C','S'): {
  672                    value_SetEnum(parent,emdi12_SecurityType_CS); ret = true; break;
  673                }
  674                case LE_STR2('D','A'): {
  675                    value_SetEnum(parent,emdi12_SecurityType_DA); ret = true; break;
  676                }
  677                case LE_STR2('S','R'): {
  678                    value_SetEnum(parent,emdi12_SecurityType_SR); ret = true; break;
  679                }
  680            }
  681            break;
  682        }
  683        case 3: {
  684            switch (u64(algo::ReadLE16(rhs.elems))|(u64(rhs[2])<<16)) {
  685                case LE_STR3('E','T','C'): {
  686                    value_SetEnum(parent,emdi12_SecurityType_ETC); ret = true; break;
  687                }
  688                case LE_STR3('E','T','F'): {
  689                    value_SetEnum(parent,emdi12_SecurityType_ETF); ret = true; break;
  690                }
  691                case LE_STR3('E','T','N'): {
  692                    value_SetEnum(parent,emdi12_SecurityType_ETN); ret = true; break;
  693                }
  694                case LE_STR3('F','U','N'): {
  695                    value_SetEnum(parent,emdi12_SecurityType_FUN); ret = true; break;
  696                }
  697                case LE_STR3('F','U','T'): {
  698                    value_SetEnum(parent,emdi12_SecurityType_FUT); ret = true; break;
  699                }
  700                case LE_STR3('O','P','T'): {
  701                    value_SetEnum(parent,emdi12_SecurityType_OPT); ret = true; break;
  702                }
  703                case LE_STR3('T','R','F'): {
  704                    value_SetEnum(parent,emdi12_SecurityType_TRF); ret = true; break;
  705                }
  706                case LE_STR3('V','A','R'): {
  707                    value_SetEnum(parent,emdi12_SecurityType_VAR); ret = true; break;
  708                }
  709                case LE_STR3('W','A','R'): {
  710                    value_SetEnum(parent,emdi12_SecurityType_WAR); ret = true; break;
  711                }
  712            }
  713            break;
  714        }
  715        case 4: {
  716            switch (u64(algo::ReadLE32(rhs.elems))) {
  717                case LE_STR4('B','O','N','D'): {
  718                    value_SetEnum(parent,emdi12_SecurityType_BOND); ret = true; break;
  719                }
  720                case LE_STR4('M','L','E','G'): {
  721                    value_SetEnum(parent,emdi12_SecurityType_MLEG); ret = true; break;
  722                }
  723                case LE_STR4('T','A','R','P'): {
  724                    value_SetEnum(parent,emdi12_SecurityType_TARP); ret = true; break;
  725                }
  726            }
  727            break;
  728        }
  729        case 5: {
  730            switch (u64(algo::ReadLE32(rhs.elems))|(u64(rhs[4])<<32)) {
  731                case LE_STR5('O','T','H','E','R'): {
  732                    value_SetEnum(parent,emdi12_SecurityType_OTHER); ret = true; break;
  733                }
  734            }
  735            break;
  736        }
  737    }
  738    return ret;
  739}
  740
  741// --- emdi12.SecurityType.value.SetStrptr
  742// Convert string to field.
  743// If the string is invalid, set numeric value to DFLT
  744void emdi12::value_SetStrptr(emdi12::SecurityType& parent, algo::strptr rhs, emdi12_SecurityTypeEnum dflt) {
  745    if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
  746}
  747
  748// --- emdi12.SecurityType.value.ReadStrptrMaybe
  749// Convert string to field. Return success value
  750bool emdi12::value_ReadStrptrMaybe(emdi12::SecurityType& parent, algo::strptr rhs) {
  751    bool retval = false;
  752    retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
  753    if (!retval) { // didn't work? try reading as underlying type
  754        retval = u32_ReadStrptrMaybe(parent.value,rhs);
  755    }
  756    return retval;
  757}
  758
  759// --- emdi12.SecurityType..ReadStrptrMaybe
  760// Read fields of emdi12::SecurityType from an ascii string.
  761// The format of the string is the format of the emdi12::SecurityType's only field
  762bool emdi12::SecurityType_ReadStrptrMaybe(emdi12::SecurityType &parent, algo::strptr in_str) {
  763    bool retval = true;
  764    retval = retval && value_ReadStrptrMaybe(parent, in_str);
  765    return retval;
  766}
  767
  768// --- emdi12.SecurityType..Print
  769// print string representation of ROW to string STR
  770// cfmt:emdi12.SecurityType.String  printfmt:Raw
  771void emdi12::SecurityType_Print(emdi12::SecurityType row, algo::cstring& str) {
  772    emdi12::value_Print(row, str);
  773}
  774
  775// --- emdi12.ProductComplex.value.ToCstr
  776// Convert numeric value of field to one of predefined string constants.
  777// If string is found, return a static C string. Otherwise, return NULL.
  778const char* emdi12::value_ToCstr(const emdi12::ProductComplex& parent) {
  779    const char *ret = NULL;
  780    switch(value_GetEnum(parent)) {
  781        case emdi12_ProductComplex_1       : ret = "1";  break;
  782        case emdi12_ProductComplex_2       : ret = "2";  break;
  783        case emdi12_ProductComplex_3       : ret = "3";  break;
  784        case emdi12_ProductComplex_4       : ret = "4";  break;
  785        case emdi12_ProductComplex_5       : ret = "5";  break;
  786        case emdi12_ProductComplex_6       : ret = "6";  break;
  787        case emdi12_ProductComplex_7       : ret = "7";  break;
  788        case emdi12_ProductComplex_8       : ret = "8";  break;
  789        case emdi12_ProductComplex_9       : ret = "9";  break;
  790        case emdi12_ProductComplex_10      : ret = "10";  break;
  791        case emdi12_ProductComplex_11      : ret = "11";  break;
  792        case emdi12_ProductComplex_12      : ret = "12";  break;
  793    }
  794    return ret;
  795}
  796
  797// --- emdi12.ProductComplex.value.Print
  798// Convert value to a string. First, attempt conversion to a known string.
  799// If no string matches, print value as a numeric value.
  800void emdi12::value_Print(const emdi12::ProductComplex& parent, algo::cstring &lhs) {
  801    const char *strval = value_ToCstr(parent);
  802    if (strval) {
  803        lhs << strval;
  804    } else {
  805        lhs << parent.value;
  806    }
  807}
  808
  809// --- emdi12.ProductComplex.value.SetStrptrMaybe
  810// Convert string to field.
  811// If the string is invalid, do not modify field and return false.
  812// In case of success, return true
  813bool emdi12::value_SetStrptrMaybe(emdi12::ProductComplex& parent, algo::strptr rhs) {
  814    bool ret = false;
  815    switch (elems_N(rhs)) {
  816        case 1: {
  817            switch (u64(rhs[0])) {
  818                case '1': {
  819                    value_SetEnum(parent,emdi12_ProductComplex_1); ret = true; break;
  820                }
  821                case '2': {
  822                    value_SetEnum(parent,emdi12_ProductComplex_2); ret = true; break;
  823                }
  824                case '3': {
  825                    value_SetEnum(parent,emdi12_ProductComplex_3); ret = true; break;
  826                }
  827                case '4': {
  828                    value_SetEnum(parent,emdi12_ProductComplex_4); ret = true; break;
  829                }
  830                case '5': {
  831                    value_SetEnum(parent,emdi12_ProductComplex_5); ret = true; break;
  832                }
  833                case '6': {
  834                    value_SetEnum(parent,emdi12_ProductComplex_6); ret = true; break;
  835                }
  836                case '7': {
  837                    value_SetEnum(parent,emdi12_ProductComplex_7); ret = true; break;
  838                }
  839                case '8': {
  840                    value_SetEnum(parent,emdi12_ProductComplex_8); ret = true; break;
  841                }
  842                case '9': {
  843                    value_SetEnum(parent,emdi12_ProductComplex_9); ret = true; break;
  844                }
  845            }
  846            break;
  847        }
  848        case 2: {
  849            switch (u64(algo::ReadLE16(rhs.elems))) {
  850                case LE_STR2('1','0'): {
  851                    value_SetEnum(parent,emdi12_ProductComplex_10); ret = true; break;
  852                }
  853                case LE_STR2('1','1'): {
  854                    value_SetEnum(parent,emdi12_ProductComplex_11); ret = true; break;
  855                }
  856                case LE_STR2('1','2'): {
  857                    value_SetEnum(parent,emdi12_ProductComplex_12); ret = true; break;
  858                }
  859            }
  860            break;
  861        }
  862    }
  863    return ret;
  864}
  865
  866// --- emdi12.ProductComplex.value.SetStrptr
  867// Convert string to field.
  868// If the string is invalid, set numeric value to DFLT
  869void emdi12::value_SetStrptr(emdi12::ProductComplex& parent, algo::strptr rhs, emdi12_ProductComplexEnum dflt) {
  870    if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
  871}
  872
  873// --- emdi12.ProductComplex.value.ReadStrptrMaybe
  874// Convert string to field. Return success value
  875bool emdi12::value_ReadStrptrMaybe(emdi12::ProductComplex& parent, algo::strptr rhs) {
  876    bool retval = false;
  877    retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
  878    if (!retval) { // didn't work? try reading as underlying type
  879        retval = u32_ReadStrptrMaybe(parent.value,rhs);
  880    }
  881    return retval;
  882}
  883
  884// --- emdi12.ProductComplex..ReadStrptrMaybe
  885// Read fields of emdi12::ProductComplex from an ascii string.
  886// The format of the string is the format of the emdi12::ProductComplex's only field
  887bool emdi12::ProductComplex_ReadStrptrMaybe(emdi12::ProductComplex &parent, algo::strptr in_str) {
  888    bool retval = true;
  889    retval = retval && value_ReadStrptrMaybe(parent, in_str);
  890    return retval;
  891}
  892
  893// --- emdi12.ProductComplex..Print
  894// print string representation of ROW to string STR
  895// cfmt:emdi12.ProductComplex.String  printfmt:Raw
  896void emdi12::ProductComplex_Print(emdi12::ProductComplex row, algo::cstring& str) {
  897    emdi12::value_Print(row, str);
  898}
  899
  900// --- emdi12.LastFragment.value.ToCstr
  901// Convert numeric value of field to one of predefined string constants.
  902// If string is found, return a static C string. Otherwise, return NULL.
  903const char* emdi12::value_ToCstr(const emdi12::LastFragment& parent) {
  904    const char *ret = NULL;
  905    switch(value_GetEnum(parent)) {
  906        case emdi12_LastFragment_N         : ret = "N";  break;
  907        case emdi12_LastFragment_Y         : ret = "Y";  break;
  908    }
  909    return ret;
  910}
  911
  912// --- emdi12.LastFragment.value.Print
  913// Convert value to a string. First, attempt conversion to a known string.
  914// If no string matches, print value as a numeric value.
  915void emdi12::value_Print(const emdi12::LastFragment& parent, algo::cstring &lhs) {
  916    const char *strval = value_ToCstr(parent);
  917    if (strval) {
  918        lhs << strval;
  919    } else {
  920        lhs << parent.value;
  921    }
  922}
  923
  924// --- emdi12.LastFragment.value.SetStrptrMaybe
  925// Convert string to field.
  926// If the string is invalid, do not modify field and return false.
  927// In case of success, return true
  928bool emdi12::value_SetStrptrMaybe(emdi12::LastFragment& parent, algo::strptr rhs) {
  929    bool ret = false;
  930    switch (elems_N(rhs)) {
  931        case 1: {
  932            switch (u64(rhs[0])) {
  933                case 'N': {
  934                    value_SetEnum(parent,emdi12_LastFragment_N); ret = true; break;
  935                }
  936                case 'Y': {
  937                    value_SetEnum(parent,emdi12_LastFragment_Y); ret = true; break;
  938                }
  939            }
  940            break;
  941        }
  942    }
  943    return ret;
  944}
  945
  946// --- emdi12.LastFragment.value.SetStrptr
  947// Convert string to field.
  948// If the string is invalid, set numeric value to DFLT
  949void emdi12::value_SetStrptr(emdi12::LastFragment& parent, algo::strptr rhs, emdi12_LastFragmentEnum dflt) {
  950    if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
  951}
  952
  953// --- emdi12.LastFragment.value.ReadStrptrMaybe
  954// Convert string to field. Return success value
  955bool emdi12::value_ReadStrptrMaybe(emdi12::LastFragment& parent, algo::strptr rhs) {
  956    bool retval = false;
  957    retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
  958    if (!retval) { // didn't work? try reading as underlying type
  959        retval = u32_ReadStrptrMaybe(parent.value,rhs);
  960    }
  961    return retval;
  962}
  963
  964// --- emdi12.LastFragment..ReadStrptrMaybe
  965// Read fields of emdi12::LastFragment from an ascii string.
  966// The format of the string is the format of the emdi12::LastFragment's only field
  967bool emdi12::LastFragment_ReadStrptrMaybe(emdi12::LastFragment &parent, algo::strptr in_str) {
  968    bool retval = true;
  969    retval = retval && value_ReadStrptrMaybe(parent, in_str);
  970    return retval;
  971}
  972
  973// --- emdi12.LastFragment..Print
  974// print string representation of ROW to string STR
  975// cfmt:emdi12.LastFragment.String  printfmt:Raw
  976void emdi12::LastFragment_Print(emdi12::LastFragment row, algo::cstring& str) {
  977    emdi12::value_Print(row, str);
  978}
  979
  980// --- emdi12.ImpliedMarketIndicator.value.ToCstr
  981// Convert numeric value of field to one of predefined string constants.
  982// If string is found, return a static C string. Otherwise, return NULL.
  983const char* emdi12::value_ToCstr(const emdi12::ImpliedMarketIndicator& parent) {
  984    const char *ret = NULL;
  985    switch(value_GetEnum(parent)) {
  986        case emdi12_ImpliedMarketIndicator_0: ret = "0";  break;
  987        case emdi12_ImpliedMarketIndicator_3: ret = "3";  break;
  988    }
  989    return ret;
  990}
  991
  992// --- emdi12.ImpliedMarketIndicator.value.Print
  993// Convert value to a string. First, attempt conversion to a known string.
  994// If no string matches, print value as a numeric value.
  995void emdi12::value_Print(const emdi12::ImpliedMarketIndicator& parent, algo::cstring &lhs) {
  996    const char *strval = value_ToCstr(parent);
  997    if (strval) {
  998        lhs << strval;
  999    } else {
 1000        lhs << parent.value;
 1001    }
 1002}
 1003
 1004// --- emdi12.ImpliedMarketIndicator.value.SetStrptrMaybe
 1005// Convert string to field.
 1006// If the string is invalid, do not modify field and return false.
 1007// In case of success, return true
 1008bool emdi12::value_SetStrptrMaybe(emdi12::ImpliedMarketIndicator& parent, algo::strptr rhs) {
 1009    bool ret = false;
 1010    switch (elems_N(rhs)) {
 1011        case 1: {
 1012            switch (u64(rhs[0])) {
 1013                case '0': {
 1014                    value_SetEnum(parent,emdi12_ImpliedMarketIndicator_0); ret = true; break;
 1015                }
 1016                case '3': {
 1017                    value_SetEnum(parent,emdi12_ImpliedMarketIndicator_3); ret = true; break;
 1018                }
 1019            }
 1020            break;
 1021        }
 1022    }
 1023    return ret;
 1024}
 1025
 1026// --- emdi12.ImpliedMarketIndicator.value.SetStrptr
 1027// Convert string to field.
 1028// If the string is invalid, set numeric value to DFLT
 1029void emdi12::value_SetStrptr(emdi12::ImpliedMarketIndicator& parent, algo::strptr rhs, emdi12_ImpliedMarketIndicatorEnum dflt) {
 1030    if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
 1031}
 1032
 1033// --- emdi12.ImpliedMarketIndicator.value.ReadStrptrMaybe
 1034// Convert string to field. Return success value
 1035bool emdi12::value_ReadStrptrMaybe(emdi12::ImpliedMarketIndicator& parent, algo::strptr rhs) {
 1036    bool retval = false;
 1037    retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
 1038    if (!retval) { // didn't work? try reading as underlying type
 1039        retval = u32_ReadStrptrMaybe(parent.value,rhs);
 1040    }
 1041    return retval;
 1042}
 1043
 1044// --- emdi12.ImpliedMarketIndicator..ReadStrptrMaybe
 1045// Read fields of emdi12::ImpliedMarketIndicator from an ascii string.
 1046// The format of the string is the format of the emdi12::ImpliedMarketIndicator's only field
 1047bool emdi12::ImpliedMarketIndicator_ReadStrptrMaybe(emdi12::ImpliedMarketIndicator &parent, algo::strptr in_str) {
 1048    bool retval = true;
 1049    retval = retval && value_ReadStrptrMaybe(parent, in_str);
 1050    return retval;
 1051}
 1052
 1053// --- emdi12.ImpliedMarketIndicator..Print
 1054// print string representation of ROW to string STR
 1055// cfmt:emdi12.ImpliedMarketIndicator.String  printfmt:Raw
 1056void emdi12::ImpliedMarketIndicator_Print(emdi12::ImpliedMarketIndicator row, algo::cstring& str) {
 1057    emdi12::value_Print(row, str);
 1058}
 1059
 1060// --- emdi12.MarketSegmentGrp1..ReadFieldMaybe
 1061bool emdi12::MarketSegmentGrp1_ReadFieldMaybe(emdi12::MarketSegmentGrp1& parent, algo::strptr field, algo::strptr strval) {
 1062    bool retval = true;
 1063    emdi12::FieldId field_id;
 1064    (void)value_SetStrptrMaybe(field_id,field);
 1065    switch(field_id) {
 1066        case emdi12_FieldId_MarketSegmentID: {
 1067            retval = u32_ReadStrptrMaybe(parent.MarketSegmentID, strval);
 1068            break;
 1069        }
 1070        case emdi12_FieldId_ImpliedMarketIndicator: {
 1071            retval = emdi12::ImpliedMarketIndicator_ReadStrptrMaybe(parent.ImpliedMarketIndicator, strval);
 1072            break;
 1073        }
 1074        default: break;
 1075    }
 1076    if (!retval) {
 1077        algo_lib::AppendErrtext("attr",field);
 1078    }
 1079    return retval;
 1080}
 1081
 1082// --- emdi12.MarketSegmentGrp1..ReadStrptrMaybe
 1083// Read fields of emdi12::MarketSegmentGrp1 from an ascii string.
 1084// The format of the string is an ssim Tuple
 1085bool emdi12::MarketSegmentGrp1_ReadStrptrMaybe(emdi12::MarketSegmentGrp1 &parent, algo::strptr in_str) {
 1086    bool retval = true;
 1087    retval = algo::StripTypeTag(in_str, "emdi12.MarketSegmentGrp1");
 1088    ind_beg(algo::Attr_curs, attr, in_str) {
 1089        retval = retval && MarketSegmentGrp1_ReadFieldMaybe(parent, attr.name, attr.value);
 1090    }ind_end;
 1091    return retval;
 1092}
 1093
 1094// --- emdi12.MarketSegmentGrp1..Print
 1095// print string representation of ROW to string STR
 1096// cfmt:emdi12.MarketSegmentGrp1.String  printfmt:Tuple
 1097void emdi12::MarketSegmentGrp1_Print(emdi12::MarketSegmentGrp1& row, algo::cstring& str) {
 1098    algo::tempstr temp;
 1099    str << "emdi12.MarketSegmentGrp1";
 1100
 1101    u32_Print(row.MarketSegmentID, temp);
 1102    PrintAttrSpaceReset(str,"MarketSegmentID", temp);
 1103
 1104    emdi12::ImpliedMarketIndicator_Print(row.ImpliedMarketIndicator, temp);
 1105    PrintAttrSpaceReset(str,"ImpliedMarketIndicator", temp);
 1106}
 1107
 1108// --- emdi12.MarketSegmentGrp1..FastEncode
 1109void emdi12::MarketSegmentGrp1_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::MarketSegmentGrp1& parent) {
 1110    int index = ary_N(buf);
 1111    u64 pmap(0);
 1112    // MarketSegmentID unsigned copy mandatory
 1113    if (!MarketSegmentID_AssignedQ(state) || parent.MarketSegmentID != state.MarketSegmentID) {
 1114        lib_fast::EncodeUnsigned(buf,parent.MarketSegmentID,false);
 1115        lib_fast::SetPmapBit(pmap,0);
 1116    }
 1117    state.MarketSegmentID = parent.MarketSegmentID;
 1118    MarketSegmentID_SetAssigned(state);
 1119    // ImpliedMarketIndicator type none mandatory
 1120    lib_fast::EncodeUnsigned(buf,parent.ImpliedMarketIndicator.value,false);
 1121    lib_fast::InsertPmap(buf,index,pmap);
 1122}
 1123
 1124// --- emdi12.MarketSegmentGrp1..FastDecode
 1125bool emdi12::MarketSegmentGrp1_FastDecode(algo::memptr& from, FastState& state, emdi12::MarketSegmentGrp1& parent) {
 1126    bool ok = true;
 1127    u64 pmap;
 1128    ok = lib_fast::DecodePmap(from,pmap);
 1129    if (!ok) {
 1130        state.error << "emdi12.MarketSegmentGrp1: bad pmap" << eol;
 1131    }
 1132    // MarketSegmentID unsigned copy mandatory
 1133    if (ok) {
 1134        bool prs = lib_fast::GetPmapBit(pmap,0);
 1135        if (prs) {
 1136            ok = lib_fast::DecodeUnsigned(from,parent.MarketSegmentID,false);
 1137            if (!ok) {
 1138                state.error << "emdi12.MarketSegmentGrp1.MarketSegmentID: bad Unsigned" << eol;
 1139            }
 1140        } else if (MarketSegmentID_AssignedQ(state)) {
 1141            parent.MarketSegmentID = state.MarketSegmentID;
 1142        } else {
 1143            ok = false;
 1144            state.error << "emdi12.MarketSegmentGrp1.MarketSegmentID: copy operator: previous value unassigned" << eol;
 1145        }
 1146        MarketSegmentID_SetAssigned(state);
 1147        state.MarketSegmentID = parent.MarketSegmentID;
 1148    }
 1149    // ImpliedMarketIndicator type none mandatory
 1150    if (ok) {
 1151        ok = lib_fast::DecodeUnsigned(from,parent.ImpliedMarketIndicator.value,false);
 1152        if (!ok) {
 1153            state.error << "emdi12.MarketSegmentGrp1.ImpliedMarketIndicator: bad Unsigned" << eol;
 1154        }
 1155    }
 1156    return ok;
 1157}
 1158
 1159// --- emdi12.MarketSegmentGrp1..FixEncode
 1160void emdi12::MarketSegmentGrp1_FixEncode(cstring& buf, emdi12::MarketSegmentGrp1& parent, char soh) {
 1161    buf << "1300=" << parent.MarketSegmentID << soh;
 1162    buf << "1144=" << parent.ImpliedMarketIndicator << soh;
 1163}
 1164
 1165// --- emdi12.LegSecurityType.value.ToCstr
 1166// Convert numeric value of field to one of predefined string constants.
 1167// If string is found, return a static C string. Otherwise, return NULL.
 1168const char* emdi12::value_ToCstr(const emdi12::LegSecurityType& parent) {
 1169    const char *ret = NULL;
 1170    switch(value_GetEnum(parent)) {
 1171        case emdi12_LegSecurityType_MLEG   : ret = "MLEG";  break;
 1172        case emdi12_LegSecurityType_ULEG   : ret = "ULEG";  break;
 1173    }
 1174    return ret;
 1175}
 1176
 1177// --- emdi12.LegSecurityType.value.Print
 1178// Convert value to a string. First, attempt conversion to a known string.
 1179// If no string matches, print value as a numeric value.
 1180void emdi12::value_Print(const emdi12::LegSecurityType& parent, algo::cstring &lhs) {
 1181    const char *strval = value_ToCstr(parent);
 1182    if (strval) {
 1183        lhs << strval;
 1184    } else {
 1185        lhs << parent.value;
 1186    }
 1187}
 1188
 1189// --- emdi12.LegSecurityType.value.SetStrptrMaybe
 1190// Convert string to field.
 1191// If the string is invalid, do not modify field and return false.
 1192// In case of success, return true
 1193bool emdi12::value_SetStrptrMaybe(emdi12::LegSecurityType& parent, algo::strptr rhs) {
 1194    bool ret = false;
 1195    switch (elems_N(rhs)) {
 1196        case 4: {
 1197            switch (u64(algo::ReadLE32(rhs.elems))) {
 1198                case LE_STR4('M','L','E','G'): {
 1199                    value_SetEnum(parent,emdi12_LegSecurityType_MLEG); ret = true; break;
 1200                }
 1201                case LE_STR4('U','L','E','G'): {
 1202                    value_SetEnum(parent,emdi12_LegSecurityType_ULEG); ret = true; break;
 1203                }
 1204            }
 1205            break;
 1206        }
 1207    }
 1208    return ret;
 1209}
 1210
 1211// --- emdi12.LegSecurityType.value.SetStrptr
 1212// Convert string to field.
 1213// If the string is invalid, set numeric value to DFLT
 1214void emdi12::value_SetStrptr(emdi12::LegSecurityType& parent, algo::strptr rhs, emdi12_LegSecurityTypeEnum dflt) {
 1215    if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
 1216}
 1217
 1218// --- emdi12.LegSecurityType.value.ReadStrptrMaybe
 1219// Convert string to field. Return success value
 1220bool emdi12::value_ReadStrptrMaybe(emdi12::LegSecurityType& parent, algo::strptr rhs) {
 1221    bool retval = false;
 1222    retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
 1223    if (!retval) { // didn't work? try reading as underlying type
 1224        retval = u32_ReadStrptrMaybe(parent.value,rhs);
 1225    }
 1226    return retval;
 1227}
 1228
 1229// --- emdi12.LegSecurityType..ReadStrptrMaybe
 1230// Read fields of emdi12::LegSecurityType from an ascii string.
 1231// The format of the string is the format of the emdi12::LegSecurityType's only field
 1232bool emdi12::LegSecurityType_ReadStrptrMaybe(emdi12::LegSecurityType &parent, algo::strptr in_str) {
 1233    bool retval = true;
 1234    retval = retval && value_ReadStrptrMaybe(parent, in_str);
 1235    return retval;
 1236}
 1237
 1238// --- emdi12.LegSecurityType..Print
 1239// print string representation of ROW to string STR
 1240// cfmt:emdi12.LegSecurityType.String  printfmt:Raw
 1241void emdi12::LegSecurityType_Print(emdi12::LegSecurityType row, algo::cstring& str) {
 1242    emdi12::value_Print(row, str);
 1243}
 1244
 1245// --- emdi12.Side.value.ToCstr
 1246// Convert numeric value of field to one of predefined string constants.
 1247// If string is found, return a static C string. Otherwise, return NULL.
 1248const char* emdi12::value_ToCstr(const emdi12::Side& parent) {
 1249    const char *ret = NULL;
 1250    switch(value_GetEnum(parent)) {
 1251        case emdi12_Side_1                 : ret = "1";  break;
 1252        case emdi12_Side_2                 : ret = "2";  break;
 1253    }
 1254    return ret;
 1255}
 1256
 1257// --- emdi12.Side.value.Print
 1258// Convert value to a string. First, attempt conversion to a known string.
 1259// If no string matches, print value as a numeric value.
 1260void emdi12::value_Print(const emdi12::Side& parent, algo::cstring &lhs) {
 1261    const char *strval = value_ToCstr(parent);
 1262    if (strval) {
 1263        lhs << strval;
 1264    } else {
 1265        lhs << parent.value;
 1266    }
 1267}
 1268
 1269// --- emdi12.Side.value.SetStrptrMaybe
 1270// Convert string to field.
 1271// If the string is invalid, do not modify field and return false.
 1272// In case of success, return true
 1273bool emdi12::value_SetStrptrMaybe(emdi12::Side& parent, algo::strptr rhs) {
 1274    bool ret = false;
 1275    switch (elems_N(rhs)) {
 1276        case 1: {
 1277            switch (u64(rhs[0])) {
 1278                case '1': {
 1279                    value_SetEnum(parent,emdi12_Side_1); ret = true; break;
 1280                }
 1281                case '2': {
 1282                    value_SetEnum(parent,emdi12_Side_2); ret = true; break;
 1283                }
 1284            }
 1285            break;
 1286        }
 1287    }
 1288    return ret;
 1289}
 1290
 1291// --- emdi12.Side.value.SetStrptr
 1292// Convert string to field.
 1293// If the string is invalid, set numeric value to DFLT
 1294void emdi12::value_SetStrptr(emdi12::Side& parent, algo::strptr rhs, emdi12_SideEnum dflt) {
 1295    if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
 1296}
 1297
 1298// --- emdi12.Side.value.ReadStrptrMaybe
 1299// Convert string to field. Return success value
 1300bool emdi12::value_ReadStrptrMaybe(emdi12::Side& parent, algo::strptr rhs) {
 1301    bool retval = false;
 1302    retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
 1303    if (!retval) { // didn't work? try reading as underlying type
 1304        retval = u32_ReadStrptrMaybe(parent.value,rhs);
 1305    }
 1306    return retval;
 1307}
 1308
 1309// --- emdi12.Side..ReadStrptrMaybe
 1310// Read fields of emdi12::Side from an ascii string.
 1311// The format of the string is the format of the emdi12::Side's only field
 1312bool emdi12::Side_ReadStrptrMaybe(emdi12::Side &parent, algo::strptr in_str) {
 1313    bool retval = true;
 1314    retval = retval && value_ReadStrptrMaybe(parent, in_str);
 1315    return retval;
 1316}
 1317
 1318// --- emdi12.Side..Print
 1319// print string representation of ROW to string STR
 1320// cfmt:emdi12.Side.String  printfmt:Raw
 1321void emdi12::Side_Print(emdi12::Side row, algo::cstring& str) {
 1322    emdi12::value_Print(row, str);
 1323}
 1324
 1325// --- emdi12.InstrmtLegGrp.LegSymbol.ReadStrptrMaybe
 1326inline static bool emdi12::LegSymbol_ReadStrptrMaybe(emdi12::InstrmtLegGrp &parent, algo::strptr in_str) {
 1327    bool retval = true;
 1328    retval = u32_ReadStrptrMaybe(parent.LegSymbol, in_str);
 1329    return retval;
 1330}
 1331
 1332// --- emdi12.InstrmtLegGrp.LegSecurityID.ReadStrptrMaybe
 1333inline static bool emdi12::LegSecurityID_ReadStrptrMaybe(emdi12::InstrmtLegGrp &parent, algo::strptr in_str) {
 1334    bool retval = true;
 1335    retval = i64_ReadStrptrMaybe(parent.LegSecurityID, in_str);
 1336    return retval;
 1337}
 1338
 1339// --- emdi12.InstrmtLegGrp.LegSecurityType.ReadStrptrMaybe
 1340inline static bool emdi12::LegSecurityType_ReadStrptrMaybe(emdi12::InstrmtLegGrp &parent, algo::strptr in_str) {
 1341    bool retval = true;
 1342    retval = emdi12::LegSecurityType_ReadStrptrMaybe(parent.LegSecurityType, in_str);
 1343    return retval;
 1344}
 1345
 1346// --- emdi12.InstrmtLegGrp.LegRatioQty.ReadStrptrMaybe
 1347inline static bool emdi12::LegRatioQty_ReadStrptrMaybe(emdi12::InstrmtLegGrp &parent, algo::strptr in_str) {
 1348    bool retval = true;
 1349    retval = u32_ReadStrptrMaybe(parent.LegRatioQty, in_str);
 1350    return retval;
 1351}
 1352
 1353// --- emdi12.InstrmtLegGrp.LegSide.ReadStrptrMaybe
 1354inline static bool emdi12::LegSide_ReadStrptrMaybe(emdi12::InstrmtLegGrp &parent, algo::strptr in_str) {
 1355    bool retval = true;
 1356    retval = emdi12::Side_ReadStrptrMaybe(parent.LegSide, in_str);
 1357    return retval;
 1358}
 1359
 1360// --- emdi12.InstrmtLegGrp.LegPrice.ReadStrptrMaybe
 1361inline static bool emdi12::LegPrice_ReadStrptrMaybe(emdi12::InstrmtLegGrp &parent, algo::strptr in_str) {
 1362    bool retval = true;
 1363    algo::Decimal LegPrice_tmp;
 1364    retval = algo::Decimal_ReadStrptrMaybe(LegPrice_tmp, in_str);
 1365    if (retval) {
 1366        LegPrice_Set(parent, LegPrice_tmp);
 1367    }
 1368    return retval;
 1369}
 1370
 1371// --- emdi12.InstrmtLegGrp.pmask_bitcurs.Next
 1372// proceed to next item
 1373void emdi12::InstrmtLegGrp_pmask_bitcurs_Next(InstrmtLegGrp_pmask_bitcurs &curs) {
 1374    ++curs.bit;
 1375    int index = curs.bit / 32;
 1376    int offset = curs.bit % 32;
 1377    for (; index < curs.n_elems; ++index, offset = 0) {
 1378        u64 rest = curs.elems[index] >> offset;
 1379        if (rest) {
 1380            offset += algo::u64_BitScanForward(rest);
 1381            break;
 1382        }
 1383    }
 1384    curs.bit = index * 32 + offset;
 1385}
 1386
 1387// --- emdi12.InstrmtLegGrp..ReadFieldMaybe
 1388bool emdi12::InstrmtLegGrp_ReadFieldMaybe(emdi12::InstrmtLegGrp& parent, algo::strptr field, algo::strptr strval) {
 1389    bool retval = true;
 1390    emdi12::FieldId field_id;
 1391    (void)value_SetStrptrMaybe(field_id,field);
 1392    switch(field_id) {
 1393        case emdi12_FieldId_pmask: {
 1394            retval = false;
 1395            break;
 1396        }
 1397        case emdi12_FieldId_LegSymbol: {
 1398            retval = LegSymbol_ReadStrptrMaybe(parent, strval);
 1399            break;
 1400        }
 1401        case emdi12_FieldId_LegSecurityID: {
 1402            retval = LegSecurityID_ReadStrptrMaybe(parent, strval);
 1403            break;
 1404        }
 1405        case emdi12_FieldId_LegSecurityIDSource: {
 1406            retval = true;
 1407            break;
 1408        }
 1409        case emdi12_FieldId_LegSecurityType: {
 1410            retval = LegSecurityType_ReadStrptrMaybe(parent, strval);
 1411            break;
 1412        }
 1413        case emdi12_FieldId_LegRatioQty: {
 1414            retval = LegRatioQty_ReadStrptrMaybe(parent, strval);
 1415            break;
 1416        }
 1417        case emdi12_FieldId_LegSide: {
 1418            retval = LegSide_ReadStrptrMaybe(parent, strval);
 1419            break;
 1420        }
 1421        case emdi12_FieldId_LegPrice: {
 1422            retval = LegPrice_ReadStrptrMaybe(parent, strval);
 1423            if (retval) {
 1424                pmask_qSetBit(parent, 0);
 1425            }
 1426            break;
 1427        }
 1428        default: break;
 1429    }
 1430    if (!retval) {
 1431        algo_lib::AppendErrtext("attr",field);
 1432    }
 1433    return retval;
 1434}
 1435
 1436// --- emdi12.InstrmtLegGrp..ReadStrptrMaybe
 1437// Read fields of emdi12::InstrmtLegGrp from an ascii string.
 1438// The format of the string is an ssim Tuple
 1439bool emdi12::InstrmtLegGrp_ReadStrptrMaybe(emdi12::InstrmtLegGrp &parent, algo::strptr in_str) {
 1440    bool retval = true;
 1441    retval = algo::StripTypeTag(in_str, "emdi12.InstrmtLegGrp");
 1442    ind_beg(algo::Attr_curs, attr, in_str) {
 1443        retval = retval && InstrmtLegGrp_ReadFieldMaybe(parent, attr.name, attr.value);
 1444    }ind_end;
 1445    return retval;
 1446}
 1447
 1448// --- emdi12.InstrmtLegGrp..Print
 1449// print string representation of ROW to string STR
 1450// cfmt:emdi12.InstrmtLegGrp.String  printfmt:Tuple
 1451void emdi12::InstrmtLegGrp_Print(emdi12::InstrmtLegGrp& row, algo::cstring& str) {
 1452    algo::tempstr temp;
 1453    str << "emdi12.InstrmtLegGrp";
 1454
 1455    u32_Print(row.LegSymbol, temp);
 1456    PrintAttrSpaceReset(str,"LegSymbol", temp);
 1457
 1458    i64_Print(row.LegSecurityID, temp);
 1459    PrintAttrSpaceReset(str,"LegSecurityID", temp);
 1460
 1461    algo::strptr_Print(LegSecurityIDSource_Get(row), temp);
 1462    PrintAttrSpaceReset(str,"LegSecurityIDSource", temp);
 1463
 1464    emdi12::LegSecurityType_Print(row.LegSecurityType, temp);
 1465    PrintAttrSpaceReset(str,"LegSecurityType", temp);
 1466
 1467    u32_Print(row.LegRatioQty, temp);
 1468    PrintAttrSpaceReset(str,"LegRatioQty", temp);
 1469
 1470    emdi12::Side_Print(row.LegSide, temp);
 1471    PrintAttrSpaceReset(str,"LegSide", temp);
 1472
 1473    if (LegPrice_PresentQ(row)) {
 1474        algo::Decimal_Print(row.LegPrice, temp);
 1475        PrintAttrSpaceReset(str,"LegPrice", temp);
 1476    }
 1477}
 1478
 1479// --- emdi12.InstrmtLegGrp..FastEncode
 1480void emdi12::InstrmtLegGrp_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::InstrmtLegGrp& parent) {
 1481    int index = ary_N(buf);
 1482    u64 pmap(0);
 1483    // LegSymbol unsigned copy mandatory
 1484    if (!LegSymbol_AssignedQ(state) || parent.LegSymbol != state.LegSymbol) {
 1485        lib_fast::EncodeUnsigned(buf,parent.LegSymbol,false);
 1486        lib_fast::SetPmapBit(pmap,0);
 1487    }
 1488    state.LegSymbol = parent.LegSymbol;
 1489    LegSymbol_SetAssigned(state);
 1490    // LegSecurityID signed none mandatory
 1491    lib_fast::EncodeSigned(buf,parent.LegSecurityID,false);
 1492    // LegSecurityIDSource string constant mandatory
 1493    // LegSecurityType type default mandatory
 1494    if (parent.LegSecurityType.value != 0) {
 1495        lib_fast::EncodeUnsigned(buf,parent.LegSecurityType.value,false);
 1496        lib_fast::SetPmapBit(pmap,1);
 1497    }
 1498    // LegRatioQty unsigned none mandatory
 1499    lib_fast::EncodeUnsigned(buf,parent.LegRatioQty,false);
 1500    // LegSide type copy mandatory
 1501    if (!LegSide_AssignedQ(state) || parent.LegSide.value != state.LegSide.value) {
 1502        lib_fast::EncodeUnsigned(buf,parent.LegSide.value,false);
 1503        lib_fast::SetPmapBit(pmap,2);
 1504    }
 1505    state.LegSide.value = parent.LegSide.value;
 1506    LegSide_SetAssigned(state);
 1507    // LegPrice scaled none optional
 1508    if (LegPrice_PresentQ(parent)) {
 1509        lib_fast::EncodeScaled(buf,parent.LegPrice,true);
 1510    } else {
 1511        lib_fast::EncodeNull(buf);
 1512    }
 1513    lib_fast::InsertPmap(buf,index,pmap);
 1514}
 1515
 1516// --- emdi12.InstrmtLegGrp..FastDecode
 1517bool emdi12::InstrmtLegGrp_FastDecode(algo::memptr& from, FastState& state, emdi12::InstrmtLegGrp& parent) {
 1518    bool ok = true;
 1519    u64 pmap;
 1520    ok = lib_fast::DecodePmap(from,pmap);
 1521    if (!ok) {
 1522        state.error << "emdi12.InstrmtLegGrp: bad pmap" << eol;
 1523    }
 1524    // LegSymbol unsigned copy mandatory
 1525    if (ok) {
 1526        bool prs = lib_fast::GetPmapBit(pmap,0);
 1527        if (prs) {
 1528            ok = lib_fast::DecodeUnsigned(from,parent.LegSymbol,false);
 1529            if (!ok) {
 1530                state.error << "emdi12.InstrmtLegGrp.LegSymbol: bad Unsigned" << eol;
 1531            }
 1532        } else if (LegSymbol_AssignedQ(state)) {
 1533            parent.LegSymbol = state.LegSymbol;
 1534        } else {
 1535            ok = false;
 1536            state.error << "emdi12.InstrmtLegGrp.LegSymbol: copy operator: previous value unassigned" << eol;
 1537        }
 1538        LegSymbol_SetAssigned(state);
 1539        state.LegSymbol = parent.LegSymbol;
 1540    }
 1541    // LegSecurityID signed none mandatory
 1542    if (ok) {
 1543        ok = lib_fast::DecodeSigned(from,parent.LegSecurityID,false);
 1544        if (!ok) {
 1545            state.error << "emdi12.InstrmtLegGrp.LegSecurityID: bad Signed" << eol;
 1546        }
 1547    }
 1548    // LegSecurityIDSource string constant mandatory
 1549    if (ok) {
 1550    }
 1551    // LegSecurityType type default mandatory
 1552    if (ok) {
 1553        bool prs = lib_fast::GetPmapBit(pmap,1);
 1554        if (prs) {
 1555            ok = lib_fast::DecodeUnsigned(from,parent.LegSecurityType.value,false);
 1556            if (!ok) {
 1557                state.error << "emdi12.InstrmtLegGrp.LegSecurityType: bad Unsigned" << eol;
 1558            }
 1559        } else {
 1560            parent.LegSecurityType.value = 0;
 1561        }
 1562    }
 1563    // LegRatioQty unsigned none mandatory
 1564    if (ok) {
 1565        ok = lib_fast::DecodeUnsigned(from,parent.LegRatioQty,false);
 1566        if (!ok) {
 1567            state.error << "emdi12.InstrmtLegGrp.LegRatioQty: bad Unsigned" << eol;
 1568        }
 1569    }
 1570    // LegSide type copy mandatory
 1571    if (ok) {
 1572        bool prs = lib_fast::GetPmapBit(pmap,2);
 1573        if (prs) {
 1574            ok = lib_fast::DecodeUnsigned(from,parent.LegSide.value,false);
 1575            if (!ok) {
 1576                state.error << "emdi12.InstrmtLegGrp.LegSide: bad Unsigned" << eol;
 1577            }
 1578        } else if (LegSide_AssignedQ(state)) {
 1579            parent.LegSide.value = state.LegSide.value;
 1580        } else {
 1581            ok = false;
 1582            state.error << "emdi12.InstrmtLegGrp.LegSide: copy operator: previous value unassigned" << eol;
 1583        }
 1584        LegSide_SetAssigned(state);
 1585        state.LegSide.value = parent.LegSide.value;
 1586    }
 1587    // LegPrice scaled none optional
 1588    if (ok) {
 1589        bool prs = !lib_fast::DecodeNull(from);
 1590        if (prs) {
 1591            ok = lib_fast::DecodeScaled(from,parent.LegPrice,true);
 1592            if (!ok) {
 1593                state.error << "emdi12.InstrmtLegGrp.LegPrice: bad Scaled" << eol;
 1594            }
 1595        }
 1596        pmask_qSetBitVal(parent,LegPrice_Present_GetBit(parent),prs);
 1597    }
 1598    return ok;
 1599}
 1600
 1601// --- emdi12.InstrmtLegGrp..FixEncode
 1602void emdi12::InstrmtLegGrp_FixEncode(cstring& buf, emdi12::InstrmtLegGrp& parent, char soh) {
 1603    buf << "600=" << parent.LegSymbol << soh;
 1604    buf << "602=" << parent.LegSecurityID << soh;
 1605    buf << "603=" << LegSecurityIDSource_Get(parent) << soh;
 1606    buf << "609=" << parent.LegSecurityType << soh;
 1607    buf << "623=" << parent.LegRatioQty << soh;
 1608    buf << "624=" << parent.LegSide << soh;
 1609    if (LegPrice_PresentQ(parent)) {
 1610        buf << "566=" << parent.LegPrice << soh;
 1611    }
 1612}
 1613
 1614// --- emdi12.ComplexInstrumentUpdate.base.CopyOut
 1615// Copy fields out of row
 1616void emdi12::parent_CopyOut(emdi12::ComplexInstrumentUpdate &row, emdi12::TemplateHeader &out) {
 1617    // length: field value is computed
 1618    // id: field value is computed
 1619    (void)row;//only to avoid -Wunused-parameter
 1620    (void)out;//only to avoid -Wunused-parameter
 1621}
 1622
 1623// --- emdi12.ComplexInstrumentUpdate.MsgSeqNum.ReadStrptrMaybe
 1624inline static bool emdi12::MsgSeqNum_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) {
 1625    bool retval = true;
 1626    retval = u32_ReadStrptrMaybe(parent.MsgSeqNum, in_str);
 1627    return retval;
 1628}
 1629
 1630// --- emdi12.ComplexInstrumentUpdate.SenderCompID.ReadStrptrMaybe
 1631inline static bool emdi12::SenderCompID_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) {
 1632    bool retval = true;
 1633    retval = u32_ReadStrptrMaybe(parent.SenderCompID, in_str);
 1634    return retval;
 1635}
 1636
 1637// --- emdi12.ComplexInstrumentUpdate.SecurityID.ReadStrptrMaybe
 1638inline static bool emdi12::SecurityID_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) {
 1639    bool retval = true;
 1640    retval = i64_ReadStrptrMaybe(parent.SecurityID, in_str);
 1641    return retval;
 1642}
 1643
 1644// --- emdi12.ComplexInstrumentUpdate.SecurityDesc.ReadStrptrMaybe
 1645inline static bool emdi12::SecurityDesc_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) {
 1646    bool retval = true;
 1647    retval = algo::Smallstr30_ReadStrptrMaybe(parent.SecurityDesc, in_str);
 1648    return retval;
 1649}
 1650
 1651// --- emdi12.ComplexInstrumentUpdate.SecuritySubType.ReadStrptrMaybe
 1652inline static bool emdi12::SecuritySubType_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) {
 1653    bool retval = true;
 1654    u32 SecuritySubType_tmp;
 1655    retval = u32_ReadStrptrMaybe(SecuritySubType_tmp, in_str);
 1656    if (retval) {
 1657        SecuritySubType_Set(parent, SecuritySubType_tmp);
 1658    }
 1659    return retval;
 1660}
 1661
 1662// --- emdi12.ComplexInstrumentUpdate.ProductComplex.ReadStrptrMaybe
 1663inline static bool emdi12::ProductComplex_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) {
 1664    bool retval = true;
 1665    retval = emdi12::ProductComplex_ReadStrptrMaybe(parent.ProductComplex, in_str);
 1666    return retval;
 1667}
 1668
 1669// --- emdi12.ComplexInstrumentUpdate.LegRatioMultiplier.ReadStrptrMaybe
 1670inline static bool emdi12::LegRatioMultiplier_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) {
 1671    bool retval = true;
 1672    u32 LegRatioMultiplier_tmp;
 1673    retval = u32_ReadStrptrMaybe(LegRatioMultiplier_tmp, in_str);
 1674    if (retval) {
 1675        LegRatioMultiplier_Set(parent, LegRatioMultiplier_tmp);
 1676    }
 1677    return retval;
 1678}
 1679
 1680// --- emdi12.ComplexInstrumentUpdate.QuantityScalingFactor.ReadStrptrMaybe
 1681inline static bool emdi12::QuantityScalingFactor_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) {
 1682    bool retval = true;
 1683    u32 QuantityScalingFactor_tmp;
 1684    retval = u32_ReadStrptrMaybe(QuantityScalingFactor_tmp, in_str);
 1685    if (retval) {
 1686        QuantityScalingFactor_Set(parent, QuantityScalingFactor_tmp);
 1687    }
 1688    return retval;
 1689}
 1690
 1691// --- emdi12.ComplexInstrumentUpdate.LastFragment.ReadStrptrMaybe
 1692inline static bool emdi12::LastFragment_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) {
 1693    bool retval = true;
 1694    retval = emdi12::LastFragment_ReadStrptrMaybe(parent.LastFragment, in_str);
 1695    return retval;
 1696}
 1697
 1698// --- emdi12.ComplexInstrumentUpdate.MarketSegmentGrp1.ReadStrptrMaybe
 1699inline static bool emdi12::MarketSegmentGrp1_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) {
 1700    bool retval = true;
 1701    retval = emdi12::MarketSegmentGrp1_ReadStrptrMaybe(parent.MarketSegmentGrp1, in_str);
 1702    return retval;
 1703}
 1704
 1705// --- emdi12.ComplexInstrumentUpdate.TransactTime.ReadStrptrMaybe
 1706inline static bool emdi12::TransactTime_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) {
 1707    bool retval = true;
 1708    retval = i64_ReadStrptrMaybe(parent.TransactTime, in_str);
 1709    return retval;
 1710}
 1711
 1712// --- emdi12.ComplexInstrumentUpdate.InstrmtLegGrp.Getary
 1713// Access var-length portion as an aryptr. Length is determined from one of the fields.
 1714algo::aryptr<emdi12::InstrmtLegGrp> emdi12::InstrmtLegGrp_Getary(emdi12::ComplexInstrumentUpdate& parent) {
 1715    return algo::aryptr<emdi12::InstrmtLegGrp>(InstrmtLegGrp_Addr(parent), InstrmtLegGrp_N(parent));
 1716}
 1717
 1718// --- emdi12.ComplexInstrumentUpdate.InstrmtLegGrp.Addr
 1719emdi12::InstrmtLegGrp* emdi12::InstrmtLegGrp_Addr(emdi12::ComplexInstrumentUpdate& parent) {
 1720    return (emdi12::InstrmtLegGrp*)((u8*)&parent + sizeof(emdi12::ComplexInstrumentUpdate)); // address of varlen portion
 1721}
 1722
 1723// --- emdi12.ComplexInstrumentUpdate.InstrmtLegGrp.ReadStrptrMaybe
 1724// Convert string to field. Return success value
 1725bool emdi12::InstrmtLegGrp_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate& parent, algo::strptr in_str) {
 1726    bool retval = true;
 1727    if (algo_lib::_db.varlenbuf) {
 1728        emdi12::InstrmtLegGrp *InstrmtLegGrp_tmp = new(ary_AllocN(*algo_lib::_db.varlenbuf, sizeof(emdi12::InstrmtLegGrp)).elems) emdi12::InstrmtLegGrp;
 1729        retval = emdi12::InstrmtLegGrp_ReadStrptrMaybe(*InstrmtLegGrp_tmp, in_str);
 1730    }
 1731    (void)parent;//only to avoid -Wunused-parameter
 1732    return retval;
 1733}
 1734
 1735// --- emdi12.ComplexInstrumentUpdate.pmask_bitcurs.Next
 1736// proceed to next item
 1737void emdi12::ComplexInstrumentUpdate_pmask_bitcurs_Next(ComplexInstrumentUpdate_pmask_bitcurs &curs) {
 1738    ++curs.bit;
 1739    int index = curs.bit / 32;
 1740    int offset = curs.bit % 32;
 1741    for (; index < curs.n_elems; ++index, offset = 0) {
 1742        u64 rest = curs.elems[index] >> offset;
 1743        if (rest) {
 1744            offset += algo::u64_BitScanForward(rest);
 1745            break;
 1746        }
 1747    }
 1748    curs.bit = index * 32 + offset;
 1749}
 1750
 1751// --- emdi12.ComplexInstrumentUpdate..ReadFieldMaybe
 1752bool emdi12::ComplexInstrumentUpdate_ReadFieldMaybe(emdi12::ComplexInstrumentUpdate& parent, algo::strptr field, algo::strptr strval) {
 1753    bool retval = true;
 1754    emdi12::FieldId field_id;
 1755    (void)value_SetStrptrMaybe(field_id,algo::Pathcomp(field, ".LL"));
 1756    switch(field_id) {
 1757        case emdi12_FieldId_base: {
 1758            retval = false;
 1759            break;
 1760        }
 1761        case emdi12_FieldId_length: {
 1762            retval = false;
 1763            break;
 1764        }
 1765        case emdi12_FieldId_id: {
 1766            retval = false;
 1767            break;
 1768        }
 1769        case emdi12_FieldId_pmask: {
 1770            retval = false;
 1771            break;
 1772        }
 1773        case emdi12_FieldId_MsgType: {
 1774            retval = true;
 1775            break;
 1776        }
 1777        case emdi12_FieldId_MsgSeqNum: {
 1778            retval = MsgSeqNum_ReadStrptrMaybe(parent, strval);
 1779            break;
 1780        }
 1781        case emdi12_FieldId_SenderCompID: {
 1782            retval = SenderCompID_ReadStrptrMaybe(parent, strval);
 1783            break;
 1784        }
 1785        case emdi12_FieldId_SecurityUpdateAction: {
 1786            retval = true;
 1787            break;
 1788        }
 1789        case emdi12_FieldId_SecurityID: {
 1790            retval = SecurityID_ReadStrptrMaybe(parent, strval);
 1791            break;
 1792        }
 1793        case emdi12_FieldId_SecurityIDSource: {
 1794            retval = true;
 1795            break;
 1796        }
 1797        case emdi12_FieldId_SecurityDesc: {
 1798            retval = SecurityDesc_ReadStrptrMaybe(parent, strval);
 1799            break;
 1800        }
 1801        case emdi12_FieldId_SecurityType: {
 1802            retval = true;
 1803            break;
 1804        }
 1805        case emdi12_FieldId_SecuritySubType: {
 1806            retval = SecuritySubType_ReadStrptrMaybe(parent, strval);
 1807            if (retval) {
 1808                pmask_qSetBit(parent, 2);
 1809            }
 1810            break;
 1811        }
 1812        case emdi12_FieldId_ProductComplex: {
 1813            retval = ProductComplex_ReadStrptrMaybe(parent, strval);
 1814            break;
 1815        }
 1816        case emdi12_FieldId_LegRatioMultiplier: {
 1817            retval = LegRatioMultiplier_ReadStrptrMaybe(parent, strval);
 1818            if (retval) {
 1819                pmask_qSetBit(parent, 0);
 1820            }
 1821            break;
 1822        }
 1823        case emdi12_FieldId_QuantityScalingFactor: {
 1824            retval = QuantityScalingFactor_ReadStrptrMaybe(parent, strval);
 1825            if (retval) {
 1826                pmask_qSetBit(parent, 1);
 1827            }
 1828            break;
 1829        }
 1830        case emdi12_FieldId_LastFragment: {
 1831            retval = LastFragment_ReadStrptrMaybe(parent, strval);
 1832            break;
 1833        }
 1834        case emdi12_FieldId_MarketSegmentGrp1: {
 1835            retval = MarketSegmentGrp1_ReadStrptrMaybe(parent, strval);
 1836            break;
 1837        }
 1838        case emdi12_FieldId_TransactTime: {
 1839            retval = TransactTime_ReadStrptrMaybe(parent, strval);
 1840            break;
 1841        }
 1842        case emdi12_FieldId_InstrmtLegGrp: {
 1843            retval = InstrmtLegGrp_ReadStrptrMaybe(parent, strval);
 1844            break;
 1845        }
 1846        default: break;
 1847    }
 1848    if (!retval) {
 1849        algo_lib::AppendErrtext("attr",field);
 1850    }
 1851    return retval;
 1852}
 1853
 1854// --- emdi12.ComplexInstrumentUpdate..ReadStrptrMaybe
 1855// Any varlen fields are returned in algo_lib::_db.varlenbuf if set
 1856// Read fields of emdi12::ComplexInstrumentUpdate from an ascii string.
 1857// The format of the string is an ssim Tuple
 1858bool emdi12::ComplexInstrumentUpdate_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) {
 1859    bool retval = true;
 1860    retval = algo::StripTypeTag(in_str, "emdi12.ComplexInstrumentUpdate");
 1861    ind_beg(algo::Attr_curs, attr, in_str) {
 1862        retval = retval && ComplexInstrumentUpdate_ReadFieldMaybe(parent, attr.name, attr.value);
 1863    }ind_end;
 1864    return retval;
 1865}
 1866
 1867// --- emdi12.ComplexInstrumentUpdate..Init
 1868// Set all fields to initial values.
 1869void emdi12::ComplexInstrumentUpdate_Init(emdi12::ComplexInstrumentUpdate& parent) {
 1870    parent.length = u32(ssizeof(parent) + (0));
 1871    parent.id = u32(124);
 1872    parent.pmask = u32(0);
 1873    parent.MsgSeqNum = u32(0);
 1874    parent.SenderCompID = u32(0);
 1875    parent.SecurityID = i64(0);
 1876    parent.SecuritySubType = u32(0);
 1877    parent.LegRatioMultiplier = u32(0);
 1878    parent.QuantityScalingFactor = u32(0);
 1879    parent.LastFragment = emdi12_LastFragmentEnum(1);
 1880    parent.TransactTime = i64(0);
 1881}
 1882
 1883// --- emdi12.ComplexInstrumentUpdate..Print
 1884// print string representation of ROW to string STR
 1885// cfmt:emdi12.ComplexInstrumentUpdate.String  printfmt:Tuple
 1886void emdi12::ComplexInstrumentUpdate_Print(emdi12::ComplexInstrumentUpdate& row, algo::cstring& str) {
 1887    algo::tempstr temp;
 1888    str << "emdi12.ComplexInstrumentUpdate";
 1889
 1890    algo::strptr_Print(MsgType_Get(row), temp);
 1891    PrintAttrSpaceReset(str,"MsgType", temp);
 1892
 1893    u32_Print(row.MsgSeqNum, temp);
 1894    PrintAttrSpaceReset(str,"MsgSeqNum", temp);
 1895
 1896    u32_Print(row.SenderCompID, temp);
 1897    PrintAttrSpaceReset(str,"SenderCompID", temp);
 1898
 1899    algo::strptr_Print(SecurityUpdateAction_Get(row), temp);
 1900    PrintAttrSpaceReset(str,"SecurityUpdateAction", temp);
 1901
 1902    i64_Print(row.SecurityID, temp);
 1903    PrintAttrSpaceReset(str,"SecurityID", temp);
 1904
 1905    algo::strptr_Print(SecurityIDSource_Get(row), temp);
 1906    PrintAttrSpaceReset(str,"SecurityIDSource", temp);
 1907
 1908    algo::Smallstr30_Print(row.SecurityDesc, temp);
 1909    PrintAttrSpaceReset(str,"SecurityDesc", temp);
 1910
 1911    emdi12::SecurityType_Print(SecurityType_Get(row), temp);
 1912    PrintAttrSpaceReset(str,"SecurityType", temp);
 1913
 1914    if (SecuritySubType_PresentQ(row)) {
 1915        u32_Print(row.SecuritySubType, temp);
 1916        PrintAttrSpaceReset(str,"SecuritySubType", temp);
 1917    }
 1918
 1919    emdi12::ProductComplex_Print(row.ProductComplex, temp);
 1920    PrintAttrSpaceReset(str,"ProductComplex", temp);
 1921
 1922    if (LegRatioMultiplier_PresentQ(row)) {
 1923        u32_Print(row.LegRatioMultiplier, temp);
 1924        PrintAttrSpaceReset(str,"LegRatioMultiplier", temp);
 1925    }
 1926
 1927    if (QuantityScalingFactor_PresentQ(row)) {
 1928        u32_Print(row.QuantityScalingFactor, temp);
 1929        PrintAttrSpaceReset(str,"QuantityScalingFactor", temp);
 1930    }
 1931
 1932    emdi12::LastFragment_Print(row.LastFragment, temp);
 1933    PrintAttrSpaceReset(str,"LastFragment", temp);
 1934
 1935    emdi12::MarketSegmentGrp1_Print(row.MarketSegmentGrp1, temp);
 1936    PrintAttrSpaceReset(str,"MarketSegmentGrp1", temp);
 1937
 1938    i64_Print(row.TransactTime, temp);
 1939    PrintAttrSpaceReset(str,"TransactTime", temp);
 1940
 1941    ind_beg(ComplexInstrumentUpdate_InstrmtLegGrp_curs,InstrmtLegGrp,row) {
 1942        emdi12::InstrmtLegGrp_Print(InstrmtLegGrp, temp);
 1943        tempstr name;
 1944        name << "InstrmtLegGrp.";
 1945        name << ind_curs(InstrmtLegGrp).index;
 1946        PrintAttrSpaceReset(str, name, temp);
 1947    }ind_end;
 1948}
 1949
 1950// --- emdi12.ComplexInstrumentUpdate..FastEncode
 1951void emdi12::ComplexInstrumentUpdate_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::ComplexInstrumentUpdate& parent) {
 1952    int index = ary_N(buf);
 1953    u64 pmap(0);
 1954    if (!tid_AssignedQ(state) || parent.id != state.tid) {
 1955        lib_fast::EncodeUnsigned(buf,parent.id,false);
 1956        lib_fast::SetPmapBit(pmap,0);
 1957    }
 1958    tid_SetAssigned(state);
 1959    state.tid = parent.id;
 1960    // MsgType string constant mandatory
 1961    // MsgSeqNum unsigned increment mandatory
 1962    if (MsgSeqNum_AssignedQ(state)) {
 1963        if (parent.MsgSeqNum != state.MsgSeqNum + 1) {
 1964            lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
 1965            lib_fast::SetPmapBit(pmap,1);
 1966        }
 1967    } else {
 1968        lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
 1969        lib_fast::SetPmapBit(pmap,1);
 1970    }
 1971    state.MsgSeqNum = parent.MsgSeqNum;
 1972    MsgSeqNum_SetAssigned(state);
 1973    // SenderCompID unsigned copy mandatory
 1974    if (!SenderCompID_AssignedQ(state) || parent.SenderCompID != state.SenderCompID) {
 1975        lib_fast::EncodeUnsigned(buf,parent.SenderCompID,false);
 1976        lib_fast::SetPmapBit(pmap,2);
 1977    }
 1978    state.SenderCompID = parent.SenderCompID;
 1979    SenderCompID_SetAssigned(state);
 1980    // SecurityUpdateAction string constant mandatory
 1981    // SecurityID signed none mandatory
 1982    lib_fast::EncodeSigned(buf,parent.SecurityID,false);
 1983    // SecurityIDSource string constant mandatory
 1984    // SecurityDesc string none mandatory
 1985    lib_fast::EncodeString(buf,parent.SecurityDesc,false);
 1986    // SecurityType type constant mandatory
 1987    // SecuritySubType unsigned none optional
 1988    if (SecuritySubType_PresentQ(parent)) {
 1989        lib_fast::EncodeUnsigned(buf,parent.SecuritySubType,true);
 1990    } else {
 1991        lib_fast::EncodeNull(buf);
 1992    }
 1993    // ProductComplex type copy mandatory
 1994    if (!ProductComplex_AssignedQ(state) || parent.ProductComplex.value != state.ProductComplex.value) {
 1995        lib_fast::EncodeUnsigned(buf,parent.ProductComplex.value,false);
 1996        lib_fast::SetPmapBit(pmap,3);
 1997    }
 1998    state.ProductComplex.value = parent.ProductComplex.value;
 1999    ProductComplex_SetAssigned(state);
 2000    // LegRatioMultiplier unsigned default optional
 2001    if (LegRatioMultiplier_PresentQ(parent)) {
 2002        lib_fast::EncodeUnsigned(buf,parent.LegRatioMultiplier,true);
 2003        lib_fast::SetPmapBit(pmap,4);
 2004    }
 2005    // QuantityScalingFactor unsigned none optional
 2006    if (QuantityScalingFactor_PresentQ(parent)) {
 2007        lib_fast::EncodeUnsigned(buf,parent.QuantityScalingFactor,true);
 2008    } else {
 2009        lib_fast::EncodeNull(buf);
 2010    }
 2011    // LastFragment type default mandatory
 2012    if (parent.LastFragment.value != 1) {
 2013        lib_fast::EncodeUnsigned(buf,parent.LastFragment.value,false);
 2014        lib_fast::SetPmapBit(pmap,5);
 2015    }
 2016    // InstrmtLegGrp sequence none mandatory
 2017    {
 2018        u32 length = InstrmtLegGrp_N(parent);
 2019        lib_fast::EncodeUnsigned(buf,length,false);
 2020        ind_beg(ComplexInstrumentUpdate_InstrmtLegGrp_curs,elem,parent) {
 2021            InstrmtLegGrp_FastEncode(buf,state,elem);
 2022        }ind_end;
 2023    }
 2024    // MarketSegmentGrp1 sequence none mandatory
 2025    MarketSegmentGrp1_FastEncode(buf,state,parent.MarketSegmentGrp1);
 2026    // TransactTime signed none mandatory
 2027    lib_fast::EncodeSigned(buf,parent.TransactTime,false);
 2028    lib_fast::InsertPmap(buf,index,pmap);
 2029}
 2030
 2031// --- emdi12.ComplexInstrumentUpdate..FastDecode
 2032bool emdi12::ComplexInstrumentUpdate_FastDecode(algo::memptr& from, u64 pmap, FastState& state, emdi12::ComplexInstrumentUpdate& parent) {
 2033    bool ok = true;
 2034    // MsgType string constant mandatory
 2035    if (ok) {
 2036    }
 2037    // MsgSeqNum unsigned increment mandatory
 2038    if (ok) {
 2039        bool prs = lib_fast::GetPmapBit(pmap,1);
 2040        if (prs) {
 2041            ok = lib_fast::DecodeUnsigned(from,parent.MsgSeqNum,false);
 2042            if (!ok) {
 2043                state.error << "emdi12.ComplexInstrumentUpdate.MsgSeqNum: bad Unsigned" << eol;
 2044            }
 2045        } else if (MsgSeqNum_AssignedQ(state)) {
 2046            parent.MsgSeqNum = state.MsgSeqNum + 1;
 2047        } else {
 2048            ok = false;
 2049            state.error << "emdi12.ComplexInstrumentUpdate.MsgSeqNum: increment operator: previous value unassigned" << eol;
 2050        }
 2051        MsgSeqNum_SetAssigned(state);
 2052        state.MsgSeqNum = parent.MsgSeqNum;
 2053    }
 2054    // SenderCompID unsigned copy mandatory
 2055    if (ok) {
 2056        bool prs = lib_fast::GetPmapBit(pmap,2);
 2057        if (prs) {
 2058            ok = lib_fast::DecodeUnsigned(from,parent.SenderCompID,false);
 2059            if (!ok) {
 2060                state.error << "emdi12.ComplexInstrumentUpdate.SenderCompID: bad Unsigned" << eol;
 2061            }
 2062        } else if (SenderCompID_AssignedQ(state)) {
 2063            parent.SenderCompID = state.SenderCompID;
 2064        } else {
 2065            ok = false;
 2066            state.error << "emdi12.ComplexInstrumentUpdate.SenderCompID: copy operator: previous value unassigned" << eol;
 2067        }
 2068        SenderCompID_SetAssigned(state);
 2069        state.SenderCompID = parent.SenderCompID;
 2070    }
 2071    // SecurityUpdateAction string constant mandatory
 2072    if (ok) {
 2073    }
 2074    // SecurityID signed none mandatory
 2075    if (ok) {
 2076        ok = lib_fast::DecodeSigned(from,parent.SecurityID,false);
 2077        if (!ok) {
 2078            state.error << "emdi12.ComplexInstrumentUpdate.SecurityID: bad Signed" << eol;
 2079        }
 2080    }
 2081    // SecurityIDSource string constant mandatory
 2082    if (ok) {
 2083    }
 2084    // SecurityDesc string none mandatory
 2085    if (ok) {
 2086        ok = lib_fast::DecodeString(from,parent.SecurityDesc,false);
 2087        if (!ok) {
 2088            state.error << "emdi12.ComplexInstrumentUpdate.SecurityDesc: bad String" << eol;
 2089        }
 2090    }
 2091    // SecurityType type constant mandatory
 2092    if (ok) {
 2093    }
 2094    // SecuritySubType unsigned none optional
 2095    if (ok) {
 2096        bool prs = !lib_fast::DecodeNull(from);
 2097        if (prs) {
 2098            ok = lib_fast::DecodeUnsigned(from,parent.SecuritySubType,true);
 2099            if (!ok) {
 2100                state.error << "emdi12.ComplexInstrumentUpdate.SecuritySubType: bad Unsigned" << eol;
 2101            }
 2102        }
 2103        pmask_qSetBitVal(parent,SecuritySubType_Present_GetBit(parent),prs);
 2104    }
 2105    // ProductComplex type copy mandatory
 2106    if (ok) {
 2107        bool prs = lib_fast::GetPmapBit(pmap,3);
 2108        if (prs) {
 2109            ok = lib_fast::DecodeUnsigned(from,parent.ProductComplex.value,false);
 2110            if (!ok) {
 2111                state.error << "emdi12.ComplexInstrumentUpdate.ProductComplex: bad Unsigned" << eol;
 2112            }
 2113        } else if (ProductComplex_AssignedQ(state)) {
 2114            parent.ProductComplex.value = state.ProductComplex.value;
 2115        } else {
 2116            ok = false;
 2117            state.error << "emdi12.ComplexInstrumentUpdate.ProductComplex: copy operator: previous value unassigned" << eol;
 2118        }
 2119        ProductComplex_SetAssigned(state);
 2120        state.ProductComplex.value = parent.ProductComplex.value;
 2121    }
 2122    // LegRatioMultiplier unsigned default optional
 2123    if (ok) {
 2124        bool prs = lib_fast::GetPmapBit(pmap,4);
 2125        if (prs) {
 2126            prs = !lib_fast::DecodeNull(from);
 2127            if (prs) {
 2128                ok = lib_fast::DecodeUnsigned(from,parent.LegRatioMultiplier,true);
 2129                if (!ok) {
 2130                    state.error << "emdi12.ComplexInstrumentUpdate.LegRatioMultiplier: bad Unsigned" << eol;
 2131                }
 2132            }
 2133        } else {
 2134        }
 2135        pmask_qSetBitVal(parent,LegRatioMultiplier_Present_GetBit(parent),prs);
 2136    }
 2137    // QuantityScalingFactor unsigned none optional
 2138    if (ok) {
 2139        bool prs = !lib_fast::DecodeNull(from);
 2140        if (prs) {
 2141            ok = lib_fast::DecodeUnsigned(from,parent.QuantityScalingFactor,true);
 2142            if (!ok) {
 2143                state.error << "emdi12.ComplexInstrumentUpdate.QuantityScalingFactor: bad Unsigned" << eol;
 2144            }
 2145        }
 2146        pmask_qSetBitVal(parent,QuantityScalingFactor_Present_GetBit(parent),prs);
 2147    }
 2148    // LastFragment type default mandatory
 2149    if (ok) {
 2150        bool prs = lib_fast::GetPmapBit(pmap,5);
 2151        if (prs) {
 2152            ok = lib_fast::DecodeUnsigned(from,parent.LastFragment.value,false);
 2153            if (!ok) {
 2154                state.error << "emdi12.ComplexInstrumentUpdate.LastFragment: bad Unsigned" << eol;
 2155            }
 2156        } else {
 2157            parent.LastFragment.value = 1;
 2158        }
 2159    }
 2160    // InstrmtLegGrp sequence none mandatory
 2161    if (ok) {
 2162        u32 length(0);
 2163        ok = lib_fast::DecodeUnsigned(from,length,false);
 2164        if (!ok) {
 2165            state.error << "emdi12.ComplexInstrumentUpdate.InstrmtLegGrp: bad Unsigned" << eol;
 2166        }
 2167        if (!ok) {
 2168            state.error << "emdi12.ComplexInstrumentUpdate.InstrmtLegGrp: bad length" << eol;
 2169        }
 2170        for (unsigned i=0; ok && i<length; ++i) {
 2171            InstrmtLegGrp &seq = *new(ary_AllocN(lib_fast::_db.varlen,sizeof seq).elems) InstrmtLegGrp;
 2172            ok = InstrmtLegGrp_FastDecode(from,state,seq);
 2173            if (!ok) {
 2174                state.error << "emdi12.ComplexInstrumentUpdate.InstrmtLegGrp: element #"<< i+1 << eol;
 2175            }
 2176        }
 2177    }
 2178    // MarketSegmentGrp1 sequence none mandatory
 2179    if (ok) {
 2180        ok = MarketSegmentGrp1_FastDecode(from,state,parent.MarketSegmentGrp1);
 2181    }
 2182    // TransactTime signed none mandatory
 2183    if (ok) {
 2184        ok = lib_fast::DecodeSigned(from,parent.TransactTime,false);
 2185        if (!ok) {
 2186            state.error << "emdi12.ComplexInstrumentUpdate.TransactTime: bad Signed" << eol;
 2187        }
 2188    }
 2189    return ok;
 2190}
 2191
 2192// --- emdi12.ComplexInstrumentUpdate..FixEncode
 2193void emdi12::ComplexInstrumentUpdate_FixEncode(cstring& buf, emdi12::ComplexInstrumentUpdate& parent, char soh) {
 2194    buf << "35=" << MsgType_Get(parent) << soh;
 2195    buf << "34=" << parent.MsgSeqNum << soh;
 2196    buf << "49=" << parent.SenderCompID << soh;
 2197    buf << "980=" << SecurityUpdateAction_Get(parent) << soh;
 2198    buf << "48=" << parent.SecurityID << soh;
 2199    buf << "22=" << SecurityIDSource_Get(parent) << soh;
 2200    buf << "107=" << parent.SecurityDesc << soh;
 2201    buf << "167=" << SecurityType_Get(parent) << soh;
 2202    if (SecuritySubType_PresentQ(parent)) {
 2203        buf << "762=" << parent.SecuritySubType << soh;
 2204    }
 2205    buf << "1227=" << parent.ProductComplex << soh;
 2206    if (LegRatioMultiplier_PresentQ(parent)) {
 2207        buf << "28900=" << parent.LegRatioMultiplier << soh;
 2208    }
 2209    if (QuantityScalingFactor_PresentQ(parent)) {
 2210        buf << "28907=" << parent.QuantityScalingFactor << soh;
 2211    }
 2212    buf << "893=" << parent.LastFragment << soh;
 2213    {
 2214        u32 length = InstrmtLegGrp_N(parent);
 2215        if (length) {
 2216            buf << "555=" << length << soh;
 2217        }
 2218    }
 2219    ind_beg(ComplexInstrumentUpdate_InstrmtLegGrp_curs,elem,parent) {
 2220        InstrmtLegGrp_FixEncode(buf,elem,soh);
 2221    }ind_end;
 2222    buf << "1310=1" << soh;
 2223    buf << "60=" << parent.TransactTime << soh;
 2224}
 2225
 2226// --- emdi12.CrossRequestType.value.ToCstr
 2227// Convert numeric value of field to one of predefined string constants.
 2228// If string is found, return a static C string. Otherwise, return NULL.
 2229const char* emdi12::value_ToCstr(const emdi12::CrossRequestType& parent) {
 2230    const char *ret = NULL;
 2231    switch(value_GetEnum(parent)) {
 2232        case emdi12_CrossRequestType_1     : ret = "1";  break;
 2233        case emdi12_CrossRequestType_2     : ret = "2";  break;
 2234    }
 2235    return ret;
 2236}
 2237
 2238// --- emdi12.CrossRequestType.value.Print
 2239// Convert value to a string. First, attempt conversion to a known string.
 2240// If no string matches, print value as a numeric value.
 2241void emdi12::value_Print(const emdi12::CrossRequestType& parent, algo::cstring &lhs) {
 2242    const char *strval = value_ToCstr(parent);
 2243    if (strval) {
 2244        lhs << strval;
 2245    } else {
 2246        lhs << parent.value;
 2247    }
 2248}
 2249
 2250// --- emdi12.CrossRequestType.value.SetStrptrMaybe
 2251// Convert string to field.
 2252// If the string is invalid, do not modify field and return false.
 2253// In case of success, return true
 2254bool emdi12::value_SetStrptrMaybe(emdi12::CrossRequestType& parent, algo::strptr rhs) {
 2255    bool ret = false;
 2256    switch (elems_N(rhs)) {
 2257        case 1: {
 2258            switch (u64(rhs[0])) {
 2259                case '1': {
 2260                    value_SetEnum(parent,emdi12_CrossRequestType_1); ret = true; break;
 2261                }
 2262                case '2': {
 2263                    value_SetEnum(parent,emdi12_CrossRequestType_2); ret = true; break;
 2264                }
 2265            }
 2266            break;
 2267        }
 2268    }
 2269    return ret;
 2270}
 2271
 2272// --- emdi12.CrossRequestType.value.SetStrptr
 2273// Convert string to field.
 2274// If the string is invalid, set numeric value to DFLT
 2275void emdi12::value_SetStrptr(emdi12::CrossRequestType& parent, algo::strptr rhs, emdi12_CrossRequestTypeEnum dflt) {
 2276    if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
 2277}
 2278
 2279// --- emdi12.CrossRequestType.value.ReadStrptrMaybe
 2280// Convert string to field. Return success value
 2281bool emdi12::value_ReadStrptrMaybe(emdi12::CrossRequestType& parent, algo::strptr rhs) {
 2282    bool retval = false;
 2283    retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
 2284    if (!retval) { // didn't work? try reading as underlying type
 2285        retval = u32_ReadStrptrMaybe(parent.value,rhs);
 2286    }
 2287    return retval;
 2288}
 2289
 2290// --- emdi12.CrossRequestType..ReadStrptrMaybe
 2291// Read fields of emdi12::CrossRequestType from an ascii string.
 2292// The format of the string is the format of the emdi12::CrossRequestType's only field
 2293bool emdi12::CrossRequestType_ReadStrptrMaybe(emdi12::CrossRequestType &parent, algo::strptr in_str) {
 2294    bool retval = true;
 2295    retval = retval && value_ReadStrptrMaybe(parent, in_str);
 2296    return retval;
 2297}
 2298
 2299// --- emdi12.CrossRequestType..Print
 2300// print string representation of ROW to string STR
 2301// cfmt:emdi12.CrossRequestType.String  printfmt:Raw
 2302void emdi12::CrossRequestType_Print(emdi12::CrossRequestType row, algo::cstring& str) {
 2303    emdi12::value_Print(row, str);
 2304}
 2305
 2306// --- emdi12.InputSource.value.ToCstr
 2307// Convert numeric value of field to one of predefined string constants.
 2308// If string is found, return a static C string. Otherwise, return NULL.
 2309const char* emdi12::value_ToCstr(const emdi12::InputSource& parent) {
 2310    const char *ret = NULL;
 2311    switch(value_GetEnum(parent)) {
 2312        case emdi12_InputSource_1          : ret = "1";  break;
 2313    }
 2314    return ret;
 2315}
 2316
 2317// --- emdi12.InputSource.value.Print
 2318// Convert value to a string. First, attempt conversion to a known string.
 2319// If no string matches, print value as a numeric value.
 2320void emdi12::value_Print(const emdi12::InputSource& parent, algo::cstring &lhs) {
 2321    const char *strval = value_ToCstr(parent);
 2322    if (strval) {
 2323        lhs << strval;
 2324    } else {
 2325        lhs << parent.value;
 2326    }
 2327}
 2328
 2329// --- emdi12.InputSource.value.SetStrptrMaybe
 2330// Convert string to field.
 2331// If the string is invalid, do not modify field and return false.
 2332// In case of success, return true
 2333bool emdi12::value_SetStrptrMaybe(emdi12::InputSource& parent, algo::strptr rhs) {
 2334    bool ret = false;
 2335    switch (elems_N(rhs)) {
 2336        case 1: {
 2337            switch (u64(rhs[0])) {
 2338                case '1': {
 2339                    value_SetEnum(parent,emdi12_InputSource_1); ret = true; break;
 2340                }
 2341            }
 2342            break;
 2343        }
 2344    }
 2345    return ret;
 2346}
 2347
 2348// --- emdi12.InputSource.value.SetStrptr
 2349// Convert string to field.
 2350// If the string is invalid, set numeric value to DFLT
 2351void emdi12::value_SetStrptr(emdi12::InputSource& parent, algo::strptr rhs, emdi12_InputSourceEnum dflt) {
 2352    if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
 2353}
 2354
 2355// --- emdi12.InputSource.value.ReadStrptrMaybe
 2356// Convert string to field. Return success value
 2357bool emdi12::value_ReadStrptrMaybe(emdi12::InputSource& parent, algo::strptr rhs) {
 2358    bool retval = false;
 2359    retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
 2360    if (!retval) { // didn't work? try reading as underlying type
 2361        retval = u32_ReadStrptrMaybe(parent.value,rhs);
 2362    }
 2363    return retval;
 2364}
 2365
 2366// --- emdi12.InputSource..ReadStrptrMaybe
 2367// Read fields of emdi12::InputSource from an ascii string.
 2368// The format of the string is the format of the emdi12::InputSource's only field
 2369bool emdi12::InputSource_ReadStrptrMaybe(emdi12::InputSource &parent, algo::strptr in_str) {
 2370    bool retval = true;
 2371    retval = retval && value_ReadStrptrMaybe(parent, in_str);
 2372    return retval;
 2373}
 2374
 2375// --- emdi12.InputSource..Print
 2376// print string representation of ROW to string STR
 2377// cfmt:emdi12.InputSource.String  printfmt:Raw
 2378void emdi12::InputSource_Print(emdi12::InputSource row, algo::cstring& str) {
 2379    emdi12::value_Print(row, str);
 2380}
 2381
 2382// --- emdi12.CrossRequestSideGrp.Side.ReadStrptrMaybe
 2383inline static bool emdi12::Side_ReadStrptrMaybe(emdi12::CrossRequestSideGrp &parent, algo::strptr in_str) {
 2384    bool retval = true;
 2385    emdi12::Side Side_tmp;
 2386    retval = emdi12::Side_ReadStrptrMaybe(Side_tmp, in_str);
 2387    if (retval) {
 2388        Side_Set(parent, Side_tmp);
 2389    }
 2390    return retval;
 2391}
 2392
 2393// --- emdi12.CrossRequestSideGrp.pmask_bitcurs.Next
 2394// proceed to next item
 2395void emdi12::CrossRequestSideGrp_pmask_bitcurs_Next(CrossRequestSideGrp_pmask_bitcurs &curs) {
 2396    ++curs.bit;
 2397    int index = curs.bit / 32;
 2398    int offset = curs.bit % 32;
 2399    for (; index < curs.n_elems; ++index, offset = 0) {
 2400        u64 rest = curs.elems[index] >> offset;
 2401        if (rest) {
 2402            offset += algo::u64_BitScanForward(rest);
 2403            break;
 2404        }
 2405    }
 2406    curs.bit = index * 32 + offset;
 2407}
 2408
 2409// --- emdi12.CrossRequestSideGrp..ReadFieldMaybe
 2410bool emdi12::CrossRequestSideGrp_ReadFieldMaybe(emdi12::CrossRequestSideGrp& parent, algo::strptr field, algo::strptr strval) {
 2411    bool retval = true;
 2412    emdi12::FieldId field_id;
 2413    (void)value_SetStrptrMaybe(field_id,field);
 2414    switch(field_id) {
 2415        case emdi12_FieldId_pmask: {
 2416            retval = false;
 2417            break;
 2418        }
 2419        case emdi12_FieldId_Side: {
 2420            retval = Side_ReadStrptrMaybe(parent, strval);
 2421            if (retval) {
 2422                pmask_qSetBit(parent, 0);
 2423            }
 2424            break;
 2425        }
 2426        case emdi12_FieldId_InputSource: {
 2427            retval = true;
 2428            break;
 2429        }
 2430        default: break;
 2431    }
 2432    if (!retval) {
 2433        algo_lib::AppendErrtext("attr",field);
 2434    }
 2435    return retval;
 2436}
 2437
 2438// --- emdi12.CrossRequestSideGrp..ReadStrptrMaybe
 2439// Read fields of emdi12::CrossRequestSideGrp from an ascii string.
 2440// The format of the string is an ssim Tuple
 2441bool emdi12::CrossRequestSideGrp_ReadStrptrMaybe(emdi12::CrossRequestSideGrp &parent, algo::strptr in_str) {
 2442    bool retval = true;
 2443    retval = algo::StripTypeTag(in_str, "emdi12.CrossRequestSideGrp");
 2444    ind_beg(algo::Attr_curs, attr, in_str) {
 2445        retval = retval && CrossRequestSideGrp_ReadFieldMaybe(parent, attr.name, attr.value);
 2446    }ind_end;
 2447    return retval;
 2448}
 2449
 2450// --- emdi12.CrossRequestSideGrp..Print
 2451// print string representation of ROW to string STR
 2452// cfmt:emdi12.CrossRequestSideGrp.String  printfmt:Tuple
 2453void emdi12::CrossRequestSideGrp_Print(emdi12::CrossRequestSideGrp& row, algo::cstring& str) {
 2454    algo::tempstr temp;
 2455    str << "emdi12.CrossRequestSideGrp";
 2456
 2457    if (Side_PresentQ(row)) {
 2458        emdi12::Side_Print(row.Side, temp);
 2459        PrintAttrSpaceReset(str,"Side", temp);
 2460    }
 2461
 2462    emdi12::InputSource_Print(InputSource_Get(row), temp);
 2463    PrintAttrSpaceReset(str,"InputSource", temp);
 2464}
 2465
 2466// --- emdi12.CrossRequestSideGrp..FastEncode
 2467void emdi12::CrossRequestSideGrp_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::CrossRequestSideGrp& parent) {
 2468    int index = ary_N(buf);
 2469    u64 pmap(0);
 2470    // Side type copy optional
 2471    if (Side_PresentQ(parent)) {
 2472        if (!Side_AssignedQ(state) || !Side_PresentQ(state) ||  parent.Side.value != state.Side.value ) {
 2473            lib_fast::EncodeUnsigned(buf,parent.Side.value,true);
 2474            lib_fast::SetPmapBit(pmap,0);
 2475        }
 2476    } else {
 2477        if (Side_AssignedQ(state)) {
 2478            lib_fast::EncodeNull(buf);
 2479            lib_fast::SetPmapBit(pmap,0);
 2480        }
 2481    }
 2482    state.Side.value = parent.Side.value;
 2483    present_qSetBitVal(state,Side_Present_GetBit(state),Side_PresentQ(parent));
 2484    Side_SetAssigned(state);
 2485    // InputSource type constant mandatory
 2486    lib_fast::InsertPmap(buf,index,pmap);
 2487}
 2488
 2489// --- emdi12.CrossRequestSideGrp..FastDecode
 2490bool emdi12::CrossRequestSideGrp_FastDecode(algo::memptr& from, FastState& state, emdi12::CrossRequestSideGrp& parent) {
 2491    bool ok = true;
 2492    u64 pmap;
 2493    ok = lib_fast::DecodePmap(from,pmap);
 2494    if (!ok) {
 2495        state.error << "emdi12.CrossRequestSideGrp: bad pmap" << eol;
 2496    }
 2497    // Side type copy optional
 2498    if (ok) {
 2499        bool prs = lib_fast::GetPmapBit(pmap,0);
 2500        if (prs) {
 2501            prs = !lib_fast::DecodeNull(from);
 2502            if (prs) {
 2503                ok = lib_fast::DecodeUnsigned(from,parent.Side.value,true);
 2504                if (!ok) {
 2505                    state.error << "emdi12.CrossRequestSideGrp.Side: bad Unsigned" << eol;
 2506                }
 2507            }
 2508        } else if (Side_AssignedQ(state)) {
 2509            parent.Side.value = state.Side.value;
 2510            prs = Side_PresentQ(state);
 2511        } else {
 2512            prs = false;
 2513        }
 2514        pmask_qSetBitVal(parent,Side_Present_GetBit(parent),prs);
 2515        Side_SetAssigned(state);
 2516        present_qSetBitVal(state,Side_Present_GetBit(state),prs);
 2517        state.Side.value = parent.Side.value;
 2518    }
 2519    // InputSource type constant mandatory
 2520    if (ok) {
 2521    }
 2522    return ok;
 2523}
 2524
 2525// --- emdi12.CrossRequestSideGrp..FixEncode
 2526void emdi12::CrossRequestSideGrp_FixEncode(cstring& buf, emdi12::CrossRequestSideGrp& parent, char soh) {
 2527    if (Side_PresentQ(parent)) {
 2528        buf << "54=" << parent.Side << soh;
 2529    }
 2530    buf << "979=" << InputSource_Get(parent) << soh;
 2531}
 2532
 2533// --- emdi12.CrossRequest.base.CopyOut
 2534// Copy fields out of row
 2535void emdi12::parent_CopyOut(emdi12::CrossRequest &row, emdi12::TemplateHeader &out) {
 2536    // length: field value is computed
 2537    // id: field value is computed
 2538    (void)row;//only to avoid -Wunused-parameter
 2539    (void)out;//only to avoid -Wunused-parameter
 2540}
 2541
 2542// --- emdi12.CrossRequest.MsgSeqNum.ReadStrptrMaybe
 2543inline static bool emdi12::MsgSeqNum_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) {
 2544    bool retval = true;
 2545    retval = u32_ReadStrptrMaybe(parent.MsgSeqNum, in_str);
 2546    return retval;
 2547}
 2548
 2549// --- emdi12.CrossRequest.SenderCompID.ReadStrptrMaybe
 2550inline static bool emdi12::SenderCompID_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) {
 2551    bool retval = true;
 2552    retval = u32_ReadStrptrMaybe(parent.SenderCompID, in_str);
 2553    return retval;
 2554}
 2555
 2556// --- emdi12.CrossRequest.MarketSegmentID.ReadStrptrMaybe
 2557inline static bool emdi12::MarketSegmentID_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) {
 2558    bool retval = true;
 2559    retval = u32_ReadStrptrMaybe(parent.MarketSegmentID, in_str);
 2560    return retval;
 2561}
 2562
 2563// --- emdi12.CrossRequest.SecurityID.ReadStrptrMaybe
 2564inline static bool emdi12::SecurityID_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) {
 2565    bool retval = true;
 2566    retval = i64_ReadStrptrMaybe(parent.SecurityID, in_str);
 2567    return retval;
 2568}
 2569
 2570// --- emdi12.CrossRequest.OrderQty.ReadStrptrMaybe
 2571inline static bool emdi12::OrderQty_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) {
 2572    bool retval = true;
 2573    algo::Decimal OrderQty_tmp;
 2574    retval = algo::Decimal_ReadStrptrMaybe(OrderQty_tmp, in_str);
 2575    if (retval) {
 2576        OrderQty_Set(parent, OrderQty_tmp);
 2577    }
 2578    return retval;
 2579}
 2580
 2581// --- emdi12.CrossRequest.CrossRequestType.ReadStrptrMaybe
 2582inline static bool emdi12::CrossRequestType_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) {
 2583    bool retval = true;
 2584    retval = emdi12::CrossRequestType_ReadStrptrMaybe(parent.CrossRequestType, in_str);
 2585    return retval;
 2586}
 2587
 2588// --- emdi12.CrossRequest.CrossRequestSideGrp.ReadStrptrMaybe
 2589inline static bool emdi12::CrossRequestSideGrp_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) {
 2590    bool retval = true;
 2591    emdi12::CrossRequestSideGrp CrossRequestSideGrp_tmp;
 2592    retval = emdi12::CrossRequestSideGrp_ReadStrptrMaybe(CrossRequestSideGrp_tmp, in_str);
 2593    if (retval) {
 2594        CrossRequestSideGrp_Set(parent, CrossRequestSideGrp_tmp);
 2595    }
 2596    return retval;
 2597}
 2598
 2599// --- emdi12.CrossRequest.MDEntryPx.ReadStrptrMaybe
 2600inline static bool emdi12::MDEntryPx_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) {
 2601    bool retval = true;
 2602    algo::Decimal MDEntryPx_tmp;
 2603    retval = algo::Decimal_ReadStrptrMaybe(MDEntryPx_tmp, in_str);
 2604    if (retval) {
 2605        MDEntryPx_Set(parent, MDEntryPx_tmp);
 2606    }
 2607    return retval;
 2608}
 2609
 2610// --- emdi12.CrossRequest.TransactTime.ReadStrptrMaybe
 2611inline static bool emdi12::TransactTime_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) {
 2612    bool retval = true;
 2613    retval = i64_ReadStrptrMaybe(parent.TransactTime, in_str);
 2614    return retval;
 2615}
 2616
 2617// --- emdi12.CrossRequest.pmask_bitcurs.Next
 2618// proceed to next item
 2619void emdi12::CrossRequest_pmask_bitcurs_Next(CrossRequest_pmask_bitcurs &curs) {
 2620    ++curs.bit;
 2621    int index = curs.bit / 32;
 2622    int offset = curs.bit % 32;
 2623    for (; index < curs.n_elems; ++index, offset = 0) {
 2624        u64 rest = curs.elems[index] >> offset;
 2625        if (rest) {
 2626            offset += algo::u64_BitScanForward(rest);
 2627            break;
 2628        }
 2629    }
 2630    curs.bit = index * 32 + offset;
 2631}
 2632
 2633// --- emdi12.CrossRequest..ReadFieldMaybe
 2634bool emdi12::CrossRequest_ReadFieldMaybe(emdi12::CrossRequest& parent, algo::strptr field, algo::strptr strval) {
 2635    bool retval = true;
 2636    emdi12::FieldId field_id;
 2637    (void)value_SetStrptrMaybe(field_id,field);
 2638    switch(field_id) {
 2639        case emdi12_FieldId_base: {
 2640            retval = false;
 2641            break;
 2642        }
 2643        case emdi12_FieldId_length: {
 2644            retval = false;
 2645            break;
 2646        }
 2647        case emdi12_FieldId_id: {
 2648            retval = false;
 2649            break;
 2650        }
 2651        case emdi12_FieldId_pmask: {
 2652            retval = false;
 2653            break;
 2654        }
 2655        case emdi12_FieldId_MsgType: {
 2656            retval = true;
 2657            break;
 2658        }
 2659        case emdi12_FieldId_MsgSeqNum: {
 2660            retval = MsgSeqNum_ReadStrptrMaybe(parent, strval);
 2661            break;
 2662        }
 2663        case emdi12_FieldId_SenderCompID: {
 2664            retval = SenderCompID_ReadStrptrMaybe(parent, strval);
 2665            break;
 2666        }
 2667        case emdi12_FieldId_MarketSegmentID: {
 2668            retval = MarketSegmentID_ReadStrptrMaybe(parent, strval);
 2669            break;
 2670        }
 2671        case emdi12_FieldId_SecurityID: {
 2672            retval = SecurityID_ReadStrptrMaybe(parent, strval);
 2673            break;
 2674        }
 2675        case emdi12_FieldId_SecurityIDSource: {
 2676            retval = true;
 2677            break;
 2678        }
 2679        case emdi12_FieldId_OrderQty: {
 2680            retval = OrderQty_ReadStrptrMaybe(parent, strval);
 2681            if (retval) {
 2682                pmask_qSetBit(parent, 2);
 2683            }
 2684            break;
 2685        }
 2686        case emdi12_FieldId_CrossRequestType: {
 2687            retval = CrossRequestType_ReadStrptrMaybe(parent, strval);
 2688            break;
 2689        }
 2690        case emdi12_FieldId_CrossRequestSideGrp: {
 2691            retval = CrossRequestSideGrp_ReadStrptrMaybe(parent, strval);
 2692            if (retval) {
 2693                pmask_qSetBit(parent, 0);
 2694            }
 2695            break;
 2696        }
 2697        case emdi12_FieldId_MDEntryPx: {
 2698            retval = MDEntryPx_ReadStrptrMaybe(parent, strval);
 2699            if (retval) {
 2700                pmask_qSetBit(parent, 1);
 2701            }
 2702            break;
 2703        }
 2704        case emdi12_FieldId_TransactTime: {
 2705            retval = TransactTime_ReadStrptrMaybe(parent, strval);
 2706            break;
 2707        }
 2708        default: break;
 2709    }
 2710    if (!retval) {
 2711        algo_lib::AppendErrtext("attr",field);
 2712    }
 2713    return retval;
 2714}
 2715
 2716// --- emdi12.CrossRequest..ReadStrptrMaybe
 2717// Read fields of emdi12::CrossRequest from an ascii string.
 2718// The format of the string is an ssim Tuple
 2719bool emdi12::CrossRequest_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) {
 2720    bool retval = true;
 2721    retval = algo::StripTypeTag(in_str, "emdi12.CrossRequest");
 2722    ind_beg(algo::Attr_curs, attr, in_str) {
 2723        retval = retval && CrossRequest_ReadFieldMaybe(parent, attr.name, attr.value);
 2724    }ind_end;
 2725    return retval;
 2726}
 2727
 2728// --- emdi12.CrossRequest..Init
 2729// Set all fields to initial values.
 2730void emdi12::CrossRequest_Init(emdi12::CrossRequest& parent) {
 2731    parent.length = u32(ssizeof(parent) + (0));
 2732    parent.id = u32(96);
 2733    parent.pmask = u32(0);
 2734    parent.MsgSeqNum = u32(0);
 2735    parent.SenderCompID = u32(0);
 2736    parent.MarketSegmentID = u32(0);
 2737    parent.SecurityID = i64(0);
 2738    parent.OrderQty = algo::Decimal(algo::Decimal(0,0));
 2739    parent.MDEntryPx = algo::Decimal(algo::Decimal(0,0));
 2740    parent.TransactTime = i64(0);
 2741}
 2742
 2743// --- emdi12.CrossRequest..Print
 2744// print string representation of ROW to string STR
 2745// cfmt:emdi12.CrossRequest.String  printfmt:Tuple
 2746void emdi12::CrossRequest_Print(emdi12::CrossRequest& row, algo::cstring& str) {
 2747    algo::tempstr temp;
 2748    str << "emdi12.CrossRequest";
 2749
 2750    algo::strptr_Print(MsgType_Get(row), temp);
 2751    PrintAttrSpaceReset(str,"MsgType", temp);
 2752
 2753    u32_Print(row.MsgSeqNum, temp);
 2754    PrintAttrSpaceReset(str,"MsgSeqNum", temp);
 2755
 2756    u32_Print(row.SenderCompID, temp);
 2757    PrintAttrSpaceReset(str,"SenderCompID", temp);
 2758
 2759    u32_Print(row.MarketSegmentID, temp);
 2760    PrintAttrSpaceReset(str,"MarketSegmentID", temp);
 2761
 2762    i64_Print(row.SecurityID, temp);
 2763    PrintAttrSpaceReset(str,"SecurityID", temp);
 2764
 2765    algo::strptr_Print(SecurityIDSource_Get(row), temp);
 2766    PrintAttrSpaceReset(str,"SecurityIDSource", temp);
 2767
 2768    if (OrderQty_PresentQ(row)) {
 2769        algo::Decimal_Print(row.OrderQty, temp);
 2770        PrintAttrSpaceReset(str,"OrderQty", temp);
 2771    }
 2772
 2773    emdi12::CrossRequestType_Print(row.CrossRequestType, temp);
 2774    PrintAttrSpaceReset(str,"CrossRequestType", temp);
 2775
 2776    if (CrossRequestSideGrp_PresentQ(row)) {
 2777        emdi12::CrossRequestSideGrp_Print(row.CrossRequestSideGrp, temp);
 2778        PrintAttrSpaceReset(str,"CrossRequestSideGrp", temp);
 2779    }
 2780
 2781    if (MDEntryPx_PresentQ(row)) {
 2782        algo::Decimal_Print(row.MDEntryPx, temp);
 2783        PrintAttrSpaceReset(str,"MDEntryPx", temp);
 2784    }
 2785
 2786    i64_Print(row.TransactTime, temp);
 2787    PrintAttrSpaceReset(str,"TransactTime", temp);
 2788}
 2789
 2790// --- emdi12.CrossRequest..FastEncode
 2791void emdi12::CrossRequest_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::CrossRequest& parent) {
 2792    int index = ary_N(buf);
 2793    u64 pmap(0);
 2794    if (!tid_AssignedQ(state) || parent.id != state.tid) {
 2795        lib_fast::EncodeUnsigned(buf,parent.id,false);
 2796        lib_fast::SetPmapBit(pmap,0);
 2797    }
 2798    tid_SetAssigned(state);
 2799    state.tid = parent.id;
 2800    // MsgType string constant mandatory
 2801    // MsgSeqNum unsigned increment mandatory
 2802    if (MsgSeqNum_AssignedQ(state)) {
 2803        if (parent.MsgSeqNum != state.MsgSeqNum + 1) {
 2804            lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
 2805            lib_fast::SetPmapBit(pmap,1);
 2806        }
 2807    } else {
 2808        lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
 2809        lib_fast::SetPmapBit(pmap,1);
 2810    }
 2811    state.MsgSeqNum = parent.MsgSeqNum;
 2812    MsgSeqNum_SetAssigned(state);
 2813    // SenderCompID unsigned none mandatory
 2814    lib_fast::EncodeUnsigned(buf,parent.SenderCompID,false);
 2815    // MarketSegmentID unsigned none mandatory
 2816    lib_fast::EncodeUnsigned(buf,parent.MarketSegmentID,false);
 2817    // SecurityID signed none mandatory
 2818    lib_fast::EncodeSigned(buf,parent.SecurityID,false);
 2819    // SecurityIDSource string constant mandatory
 2820    // OrderQty scaled none optional
 2821    if (OrderQty_PresentQ(parent)) {
 2822        lib_fast::EncodeScaled(buf,parent.OrderQty,true);
 2823    } else {
 2824        lib_fast::EncodeNull(buf);
 2825    }
 2826    // CrossRequestType type none mandatory
 2827    lib_fast::EncodeUnsigned(buf,parent.CrossRequestType.value,false);
 2828    // CrossRequestSideGrp sequence none optional
 2829    if (CrossRequestSideGrp_PresentQ(parent)) {
 2830        CrossRequestSideGrp_FastEncode(buf,state,parent.CrossRequestSideGrp);
 2831        lib_fast::SetPmapBit(pmap,2);
 2832    }
 2833    // MDEntryPx scaled none optional
 2834    if (MDEntryPx_PresentQ(parent)) {
 2835        lib_fast::EncodeScaled(buf,parent.MDEntryPx,true);
 2836    } else {
 2837        lib_fast::EncodeNull(buf);
 2838    }
 2839    // TransactTime signed none mandatory
 2840    lib_fast::EncodeSigned(buf,parent.TransactTime,false);
 2841    lib_fast::InsertPmap(buf,index,pmap);
 2842}
 2843
 2844// --- emdi12.CrossRequest..FastDecode
 2845bool emdi12::CrossRequest_FastDecode(algo::memptr& from, u64 pmap, FastState& state, emdi12::CrossRequest& parent) {
 2846    bool ok = true;
 2847    // MsgType string constant mandatory
 2848    if (ok) {
 2849    }
 2850    // MsgSeqNum unsigned increment mandatory
 2851    if (ok) {
 2852        bool prs = lib_fast::GetPmapBit(pmap,1);
 2853        if (prs) {
 2854            ok = lib_fast::DecodeUnsigned(from,parent.MsgSeqNum,false);
 2855            if (!ok) {
 2856                state.error << "emdi12.CrossRequest.MsgSeqNum: bad Unsigned" << eol;
 2857            }
 2858        } else if (MsgSeqNum_AssignedQ(state)) {
 2859            parent.MsgSeqNum = state.MsgSeqNum + 1;
 2860        } else {
 2861            ok = false;
 2862            state.error << "emdi12.CrossRequest.MsgSeqNum: increment operator: previous value unassigned" << eol;
 2863        }
 2864        MsgSeqNum_SetAssigned(state);
 2865        state.MsgSeqNum = parent.MsgSeqNum;
 2866    }
 2867    // SenderCompID unsigned none mandatory
 2868    if (ok) {
 2869        ok = lib_fast::DecodeUnsigned(from,parent.SenderCompID,false);
 2870        if (!ok) {
 2871            state.error << "emdi12.CrossRequest.SenderCompID: bad Unsigned" << eol;
 2872        }
 2873    }
 2874    // MarketSegmentID unsigned none mandatory
 2875    if (ok) {
 2876        ok = lib_fast::DecodeUnsigned(from,parent.MarketSegmentID,false);
 2877        if (!ok) {
 2878            state.error << "emdi12.CrossRequest.MarketSegmentID: bad Unsigned" << eol;
 2879        }
 2880    }
 2881    // SecurityID signed none mandatory
 2882    if (ok) {
 2883        ok = lib_fast::DecodeSigned(from,parent.SecurityID,false);
 2884        if (!ok) {
 2885            state.error << "emdi12.CrossRequest.SecurityID: bad Signed" << eol;
 2886        }
 2887    }
 2888    // SecurityIDSource string constant mandatory
 2889    if (ok) {
 2890    }
 2891    // OrderQty scaled none optional
 2892    if (ok) {
 2893        bool prs = !lib_fast::DecodeNull(from);
 2894        if (prs) {
 2895            ok = lib_fast::DecodeScaled(from,parent.OrderQty,true);
 2896            if (!ok) {
 2897                state.error << "emdi12.CrossRequest.OrderQty: bad Scaled" << eol;
 2898            }
 2899        }
 2900        pmask_qSetBitVal(parent,OrderQty_Present_GetBit(parent),prs);
 2901    }
 2902    // CrossRequestType type none mandatory
 2903    if (ok) {
 2904        ok = lib_fast::DecodeUnsigned(from,parent.CrossRequestType.value,false);
 2905        if (!ok) {
 2906            state.error << "emdi12.CrossRequest.CrossRequestType: bad Unsigned" << eol;
 2907        }
 2908    }
 2909    // CrossRequestSideGrp sequence none optional
 2910    if (ok) {
 2911        bool prs = lib_fast::GetPmapBit(pmap,2);
 2912        pmask_qSetBitVal(parent,CrossRequestSideGrp_Present_GetBit(parent),prs);
 2913        if (prs) {
 2914            ok = CrossRequestSideGrp_FastDecode(from,state,parent.CrossRequestSideGrp);
 2915        }
 2916    }
 2917    // MDEntryPx scaled none optional
 2918    if (ok) {
 2919        bool prs = !lib_fast::DecodeNull(from);
 2920        if (prs) {
 2921            ok = lib_fast::DecodeScaled(from,parent.MDEntryPx,true);
 2922            if (!ok) {
 2923                state.error << "emdi12.CrossRequest.MDEntryPx: bad Scaled" << eol;
 2924            }
 2925        }
 2926        pmask_qSetBitVal(parent,MDEntryPx_Present_GetBit(parent),prs);
 2927    }
 2928    // TransactTime signed none mandatory
 2929    if (ok) {
 2930        ok = lib_fast::DecodeSigned(from,parent.TransactTime,false);
 2931        if (!ok) {
 2932            state.error << "emdi12.CrossRequest.TransactTime: bad Signed" << eol;
 2933        }
 2934    }
 2935    return ok;
 2936}
 2937
 2938// --- emdi12.CrossRequest..FixEncode
 2939void emdi12::CrossRequest_FixEncode(cstring& buf, emdi12::CrossRequest& parent, char soh) {
 2940    buf << "35=" << MsgType_Get(parent) << soh;
 2941    buf << "34=" << parent.MsgSeqNum << soh;
 2942    buf << "49=" << parent.SenderCompID << soh;
 2943    buf << "1300=" << parent.MarketSegmentID << soh;
 2944    buf << "48=" << parent.SecurityID << soh;
 2945    buf << "22=" << SecurityIDSource_Get(parent) << soh;
 2946    if (OrderQty_PresentQ(parent)) {
 2947        buf << "38=" << parent.OrderQty << soh;
 2948    }
 2949    buf << "28771=" << parent.CrossRequestType << soh;
 2950    buf << "552=1" << soh;
 2951    if (MDEntryPx_PresentQ(parent)) {
 2952        buf << "270=" << parent.MDEntryPx << soh;
 2953    }
 2954    buf << "60=" << parent.TransactTime << soh;
 2955}
 2956
 2957// --- emdi12.MDOriginType.value.ToCstr
 2958// Convert numeric value of field to one of predefined string constants.
 2959// If string is found, return a static C string. Otherwise, return NULL.
 2960const char* emdi12::value_ToCstr(const emdi12::MDOriginType& parent) {
 2961    const char *ret = NULL;
 2962    switch(value_GetEnum(parent)) {
 2963        case emdi12_MDOriginType_0         : ret = "0";  break;
 2964        case emdi12_MDOriginType_1         : ret = "1";  break;
 2965    }
 2966    return ret;
 2967}
 2968
 2969// --- emdi12.MDOriginType.value.Print
 2970// Convert value to a string. First, attempt conversion to a known string.
 2971// If no string matches, print value as a numeric value.
 2972void emdi12::value_Print(const emdi12::MDOriginType& parent, algo::cstring &lhs) {
 2973    const char *strval = value_ToCstr(parent);
 2974    if (strval) {
 2975        lhs << strval;
 2976    } else {
 2977        lhs << parent.value;
 2978    }
 2979}
 2980
 2981// --- emdi12.MDOriginType.value.SetStrptrMaybe
 2982// Convert string to field.
 2983// If the string is invalid, do not modify field and return false.
 2984// In case of success, return true
 2985bool emdi12::value_SetStrptrMaybe(emdi12::MDOriginType& parent, algo::strptr rhs) {
 2986    bool ret = false;
 2987    switch (elems_N(rhs)) {
 2988        case 1: {
 2989            switch (u64(rhs[0])) {
 2990                case '0': {
 2991                    value_SetEnum(parent,emdi12_MDOriginType_0); ret = true; break;
 2992                }
 2993                case '1': {
 2994                    value_SetEnum(parent,emdi12_MDOriginType_1); ret = true; break;
 2995                }
 2996            }
 2997            break;
 2998        }
 2999    }
 3000    return ret;
 3001}
 3002
 3003// --- emdi12.MDOriginType.value.SetStrptr
 3004// Convert string to field.
 3005// If the string is invalid, set numeric value to DFLT
 3006void emdi12::value_SetStrptr(emdi12::MDOriginType& parent, algo::strptr rhs, emdi12_MDOriginTypeEnum dflt) {
 3007    if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
 3008}
 3009
 3010// --- emdi12.MDOriginType.value.ReadStrptrMaybe
 3011// Convert string to field. Return success value
 3012bool emdi12::value_ReadStrptrMaybe(emdi12::MDOriginType& parent, algo::strptr rhs) {
 3013    bool retval = false;
 3014    retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
 3015    if (!retval) { // didn't work? try reading as underlying type
 3016        retval = u32_ReadStrptrMaybe(parent.value,rhs);
 3017    }
 3018    return retval;
 3019}
 3020
 3021// --- emdi12.MDOriginType..ReadStrptrMaybe
 3022// Read fields of emdi12::MDOriginType from an ascii string.
 3023// The format of the string is the format of the emdi12::MDOriginType's only field
 3024bool emdi12::MDOriginType_ReadStrptrMaybe(emdi12::MDOriginType &parent, algo::strptr in_str) {
 3025    bool retval = true;
 3026    retval = retval && value_ReadStrptrMaybe(parent, in_str);
 3027    return retval;
 3028}
 3029
 3030// --- emdi12.MDOriginType..Print
 3031// print string representation of ROW to string STR
 3032// cfmt:emdi12.MDOriginType.String  printfmt:Raw
 3033void emdi12::MDOriginType_Print(emdi12::MDOriginType row, algo::cstring& str) {
 3034    emdi12::value_Print(row, str);
 3035}
 3036
 3037// --- emdi12.MDUpdateAction.value.ToCstr
 3038// Convert numeric value of field to one of predefined string constants.
 3039// If string is found, return a static C string. Otherwise, return NULL.
 3040const char* emdi12::value_ToCstr(const emdi12::MDUpdateAction& parent) {
 3041    const char *ret = NULL;
 3042    switch(value_GetEnum(parent)) {
 3043        case emdi12_MDUpdateAction_0       : ret = "0";  break;
 3044        case emdi12_MDUpdateAction_1       : ret = "1";  break;
 3045        case emdi12_MDUpdateAction_2       : ret = "2";  break;
 3046        case emdi12_MDUpdateAction_3       : ret = "3";  break;
 3047        case emdi12_MDUpdateAction_4       : ret = "4";  break;
 3048        case emdi12_MDUpdateAction_5       : ret = "5";  break;
 3049    }
 3050    return ret;
 3051}
 3052
 3053// --- emdi12.MDUpdateAction.value.Print
 3054// Convert value to a string. First, attempt conversion to a known string.
 3055// If no string matches, print value as a numeric value.
 3056void emdi12::value_Print(const emdi12::MDUpdateAction& parent, algo::cstring &lhs) {
 3057    const char *strval = value_ToCstr(parent);
 3058    if (strval) {
 3059        lhs << strval;
 3060    } else {
 3061        lhs << parent.value;
 3062    }
 3063}
 3064
 3065// --- emdi12.MDUpdateAction.value.SetStrptrMaybe
 3066// Convert string to field.
 3067// If the string is invalid, do not modify field and return false.
 3068// In case of success, return true
 3069bool emdi12::value_SetStrptrMaybe(emdi12::MDUpdateAction& parent, algo::strptr rhs) {
 3070    bool ret = false;
 3071    switch (elems_N(rhs)) {
 3072        case 1: {
 3073            switch (u64(rhs[0])) {
 3074                case '0': {
 3075                    value_SetEnum(parent,emdi12_MDUpdateAction_0); ret = true; break;
 3076                }
 3077                case '1': {
 3078                    value_SetEnum(parent,emdi12_MDUpdateAction_1); ret = true; break;
 3079                }
 3080                case '2': {
 3081                    value_SetEnum(parent,emdi12_MDUpdateAction_2); ret = true; break;
 3082                }
 3083                case '3': {
 3084                    value_SetEnum(parent,emdi12_MDUpdateAction_3); ret = true; break;
 3085                }
 3086                case '4': {
 3087                    value_SetEnum(parent,emdi12_MDUpdateAction_4); ret = true; break;
 3088                }
 3089                case '5': {
 3090                    value_SetEnum(parent,emdi12_MDUpdateAction_5); ret = true; break;
 3091                }
 3092            }
 3093            break;
 3094        }
 3095    }
 3096    return ret;
 3097}
 3098
 3099// --- emdi12.MDUpdateAction.value.SetStrptr
 3100// Convert string to field.
 3101// If the string is invalid, set numeric value to DFLT
 3102void emdi12::value_SetStrptr(emdi12::MDUpdateAction& parent, algo::strptr rhs, emdi12_MDUpdateActionEnum dflt) {
 3103    if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
 3104}
 3105
 3106// --- emdi12.MDUpdateAction.value.ReadStrptrMaybe
 3107// Convert string to field. Return success value
 3108bool emdi12::value_ReadStrptrMaybe(emdi12::MDUpdateAction& parent, algo::strptr rhs) {
 3109    bool retval = false;
 3110    retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
 3111    if (!retval) { // didn't work? try reading as underlying type
 3112        retval = u32_ReadStrptrMaybe(parent.value,rhs);
 3113    }
 3114    return retval;
 3115}
 3116
 3117// --- emdi12.MDUpdateAction..ReadStrptrMaybe
 3118// Read fields of emdi12::MDUpdateAction from an ascii string.
 3119// The format of the string is the format of the emdi12::MDUpdateAction's only field
 3120bool emdi12::MDUpdateAction_ReadStrptrMaybe(emdi12::MDUpdateAction &parent, algo::strptr in_str) {
 3121    bool retval = true;
 3122    retval = retval && value_ReadStrptrMaybe(parent, in_str);
 3123    return retval;
 3124}
 3125
 3126// --- emdi12.MDUpdateAction..Print
 3127// print string representation of ROW to string STR
 3128// cfmt:emdi12.MDUpdateAction.String  printfmt:Raw
 3129void emdi12::MDUpdateAction_Print(emdi12::MDUpdateAction row, algo::cstring& str) {
 3130    emdi12::value_Print(row, str);
 3131}
 3132
 3133// --- emdi12.MDEntryType.value.ToCstr
 3134// Convert numeric value of field to one of predefined string constants.
 3135// If string is found, return a static C string. Otherwise, return NULL.
 3136const char* emdi12::value_ToCstr(const emdi12::MDEntryType& parent) {
 3137    const char *ret = NULL;
 3138    switch(value_GetEnum(parent)) {
 3139        case emdi12_MDEntryType_0          : ret = "0";  break;
 3140        case emdi12_MDEntryType_1          : ret = "1";  break;
 3141        case emdi12_MDEntryType_2          : ret = "2";  break;
 3142        case emdi12_MDEntryType_J          : ret = "J";  break;
 3143        case emdi12_MDEntryType_Q          : ret = "Q";  break;
 3144        case emdi12_MDEntryType_6          : ret = "6";  break;
 3145        case emdi12_MDEntryType_C          : ret = "C";  break;
 3146        case emdi12_MDEntryType_B          : ret = "B";  break;
 3147        case emdi12_MDEntryType_b          : ret = "b";  break;
 3148        case emdi12_MDEntryType_c          : ret = "c";  break;
 3149        case emdi12_MDEntryType_A          : ret = "A";  break;
 3150    }
 3151    return ret;
 3152}
 3153
 3154// --- emdi12.MDEntryType.value.Print
 3155// Convert value to a string. First, attempt conversion to a known string.
 3156// If no string matches, print value as a numeric value.
 3157void emdi12::value_Print(const emdi12::MDEntryType& parent, algo::cstring &lhs) {
 3158    const char *strval = value_ToCstr(parent);
 3159    if (strval) {
 3160        lhs << strval;
 3161    } else {
 3162        lhs << parent.value;
 3163    }
 3164}
 3165
 3166// --- emdi12.MDEntryType.value.SetStrptrMaybe
 3167// Convert string to field.
 3168// If the string is invalid, do not modify field and return false.
 3169// In case of success, return true
 3170bool emdi12::value_SetStrptrMaybe(emdi12::MDEntryType& parent, algo::strptr rhs) {
 3171    bool ret = false;
 3172    switch (elems_N(rhs)) {
 3173        case 1: {
 3174            switch (u64(rhs[0])) {
 3175                case '0': {
 3176                    value_SetEnum(parent,emdi12_MDEntryType_0); ret = true; break;
 3177                }
 3178                case '1': {
 3179                    value_SetEnum(parent,emdi12_MDEntryType_1); ret = true; break;
 3180                }
 3181                case '2': {
 3182                    value_SetEnum(parent,emdi12_MDEntryType_2); ret = true; break;
 3183                }
 3184                case '6': {
 3185                    value_SetEnum(parent,emdi12_MDEntryType_6); ret = true; break;
 3186                }
 3187                case 'A': {
 3188                    value_SetEnum(parent,emdi12_MDEntryType_A); ret = true; break;
 3189                }
 3190                case 'B': {
 3191                    value_SetEnum(parent,emdi12_MDEntryType_B); ret = true; break;
 3192                }
 3193                case 'C': {
 3194                    value_SetEnum(parent,emdi12_MDEntryType_C); ret = true; break;
 3195                }
 3196                case 'J': {
 3197                    value_SetEnum(parent,emdi12_MDEntryType_J); ret = true; break;
 3198                }
 3199                case 'Q': {
 3200                    value_SetEnum(parent,emdi12_MDEntryType_Q); ret = true; break;
 3201                }
 3202                case 'b': {
 3203                    value_SetEnum(parent,emdi12_MDEntryType_b); ret = true; break;
 3204                }
 3205                case 'c': {
 3206                    value_SetEnum(parent,emdi12_MDEntryType_c); ret = true; break;
 3207                }
 3208            }
 3209            break;
 3210        }
 3211    }
 3212    return ret;
 3213}
 3214
 3215// --- emdi12.MDEntryType.value.SetStrptr
 3216// Convert string to field.
 3217// If the string is invalid, set numeric value to DFLT
 3218void emdi12::value_SetStrptr(emdi12::MDEntryType& parent, algo::strptr rhs, emdi12_MDEntryTypeEnum dflt) {
 3219    if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
 3220}
 3221
 3222// --- emdi12.MDEntryType.value.ReadStrptrMaybe
 3223// Convert string to field. Return success value
 3224bool emdi12::value_ReadStrptrMaybe(emdi12::MDEntryType& parent, algo::strptr rhs) {
 3225    bool retval = false;
 3226    retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
 3227    if (!retval) { // didn't work? try reading as underlying type
 3228        retval = u32_ReadStrptrMaybe(parent.value,rhs);
 3229    }
 3230    return retval;
 3231}
 3232
 3233// --- emdi12.MDEntryType..ReadStrptrMaybe
 3234// Read fields of emdi12::MDEntryType from an ascii string.
 3235// The format of the string is the format of the emdi12::MDEntryType's only field
 3236bool emdi12::MDEntryType_ReadStrptrMaybe(emdi12::MDEntryType &parent, algo::strptr in_str) {
 3237    bool retval = true;
 3238    retval = retval && value_ReadStrptrMaybe(parent, in_str);
 3239    return retval;
 3240}
 3241
 3242// --- emdi12.MDEntryType..Print
 3243// print string representation of ROW to string STR
 3244// cfmt:emdi12.MDEntryType.String  printfmt:Raw
 3245void emdi12::MDEntryType_Print(emdi12::MDEntryType row, algo::cstring& str) {
 3246    emdi12::value_Print(row, str);
 3247}
 3248
 3249// --- emdi12.SecurityTradingEvent.value.ToCstr
 3250// Convert numeric value of field to one of predefined string constants.
 3251// If string is found, return a static C string. Otherwise, return NULL.
 3252const char* emdi12::value_ToCstr(const emdi12::SecurityTradingEvent& parent) {
 3253    const char *ret = NULL;
 3254    switch(value_GetEnum(parent)) {
 3255        case emdi12_SecurityTradingEvent_0 : ret = "0";  break;
 3256        case emdi12_SecurityTradingEvent_10: ret = "10";  break;
 3257        case emdi12_SecurityTradingEvent_11: ret = "11";  break;
 3258    }
 3259    return ret;
 3260}
 3261
 3262// --- emdi12.SecurityTradingEvent.value.Print
 3263// Convert value to a string. First, attempt conversion to a known string.
 3264// If no string matches, print value as a numeric value.
 3265void emdi12::value_Print(const emdi12::SecurityTradingEvent& parent, algo::cstring &lhs) {
 3266    const char *strval = value_ToCstr(parent);
 3267    if (strval) {
 3268        lhs << strval;
 3269    } else {
 3270        lhs << parent.value;
 3271    }
 3272}
 3273
 3274// --- emdi12.SecurityTradingEvent.value.SetStrptrMaybe
 3275// Convert string to field.
 3276// If the string is invalid, do not modify field and return false.
 3277// In case of success, return true
 3278bool emdi12::value_SetStrptrMaybe(emdi12::SecurityTradingEvent& parent, algo::strptr rhs) {
 3279    bool ret = false;
 3280    switch (elems_N(rhs)) {
 3281        case 1: {
 3282            switch (u64(rhs[0])) {
 3283                case '0': {
 3284                    value_SetEnum(parent,emdi12_SecurityTradingEvent_0); ret = true; break;
 3285                }
 3286            }
 3287            break;
 3288        }
 3289        case 2: {
 3290            switch (u64(algo::ReadLE16(rhs.elems))) {
 3291                case LE_STR2('1','0'): {
 3292                    value_SetEnum(parent,emdi12_SecurityTradingEvent_10); ret = true; break;
 3293                }
 3294                case LE_STR2('1','1'): {
 3295                    value_SetEnum(parent,emdi12_SecurityTradingEvent_11); ret = true; break;
 3296                }
 3297            }
 3298            break;
 3299        }
 3300    }
 3301    return ret;
 3302}
 3303
 3304// --- emdi12.SecurityTradingEvent.value.SetStrptr
 3305// Convert string to field.
 3306// If the string is invalid, set numeric value to DFLT
 3307void emdi12::value_SetStrptr(emdi12::SecurityTradingEvent& parent, algo::strptr rhs, emdi12_SecurityTradingEventEnum dflt) {
 3308    if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
 3309}
 3310
 3311// --- emdi12.SecurityTradingEvent.value.ReadStrptrMaybe
 3312// Convert string to field. Return success value
 3313bool emdi12::value_ReadStrptrMaybe(emdi12::SecurityTradingEvent& parent, algo::strptr rhs) {
 3314    bool retval = false;
 3315    retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
 3316    if (!retval) { // didn't work? try reading as underlying type
 3317        retval = u32_ReadStrptrMaybe(parent.value,rhs);
 3318    }
 3319    return retval;
 3320}
 3321
 3322// --- emdi12.SecurityTradingEvent..ReadStrptrMaybe
 3323// Read fields of emdi12::SecurityTradingEvent from an ascii string.
 3324// The format of the string is the format of the emdi12::SecurityTradingEvent's only field
 3325bool emdi12::SecurityTradingEvent_ReadStrptrMaybe(emdi12::SecurityTradingEvent &parent, algo::strptr in_str) {
 3326    bool retval = true;
 3327    retval = retval && value_ReadStrptrMaybe(parent, in_str);
 3328    return retval;
 3329}
 3330
 3331// --- emdi12.SecurityTradingEvent..Print
 3332// print string representation of ROW to string STR
 3333// cfmt:emdi12.SecurityTradingEvent.String  printfmt:Raw
 3334void emdi12::SecurityTradingEvent_Print(emdi12::SecurityTradingEvent row, algo::cstring& str) {
 3335    emdi12::value_Print(row, str);
 3336}
 3337
 3338// --- emdi12.QuoteCondition.value.ToCstr
 3339// Convert numeric value of field to one of predefined string constants.
 3340// If string is found, return a static C string. Otherwise, return NULL.
 3341const char* emdi12::value_ToCstr(const emdi12::QuoteCondition& parent) {
 3342    const char *ret = NULL;
 3343    switch(value_GetEnum(parent)) {
 3344        case emdi12_QuoteCondition_F       : ret = "F";  break;
 3345        case emdi12_QuoteCondition_Z       : ret = "Z";  break;
 3346    }
 3347    return ret;
 3348}
 3349
 3350// --- emdi12.QuoteCondition.value.Print
 3351// Convert value to a string. First, attempt conversion to a known string.
 3352// If no string matches, print value as a numeric value.
 3353void emdi12::value_Print(const emdi12::QuoteCondition& parent, algo::cstring &lhs) {
 3354    const char *strval = value_ToCstr(parent);
 3355    if (strval) {
 3356        lhs << strval;
 3357    } else {
 3358        lhs << parent.value;
 3359    }
 3360}
 3361
 3362// --- emdi12.QuoteCondition.value.SetStrptrMaybe
 3363// Convert string to field.
 3364// If the string is invalid, do not modify field and return false.
 3365// In case of success, return true
 3366bool emdi12::value_SetStrptrMaybe(emdi12::QuoteCondition& parent, algo::strptr rhs) {
 3367    bool ret = false;
 3368    switch (elems_N(rhs)) {
 3369        case 1: {
 3370            switch (u64(rhs[0])) {
 3371                case 'F': {
 3372                    value_SetEnum(parent,emdi12_QuoteCondition_F); ret = true; break;
 3373                }
 3374                case 'Z': {
 3375                    value_SetEnum(parent,emdi12_QuoteCondition_Z); ret = true; break;
 3376                }
 3377            }
 3378            break;
 3379        }
 3380    }
 3381    return ret;
 3382}
 3383
 3384// --- emdi12.QuoteCondition.value.SetStrptr
 3385// Convert string to field.
 3386// If the string is invalid, set numeric value to DFLT
 3387void emdi12::value_SetStrptr(emdi12::QuoteCondition& parent, algo::strptr rhs, emdi12_QuoteConditionEnum dflt) {
 3388    if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
 3389}
 3390
 3391// --- emdi12.QuoteCondition.value.ReadStrptrMaybe
 3392// Convert string to field. Return success value
 3393bool emdi12::value_ReadStrptrMaybe(emdi12::QuoteCondition& parent, algo::strptr rhs) {
 3394    bool retval = false;
 3395    retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
 3396    if (!retval) { // didn't work? try reading as underlying type
 3397        retval = u32_ReadStrptrMaybe(parent.value,rhs);
 3398    }
 3399    return retval;
 3400}
 3401
 3402// --- emdi12.QuoteCondition..ReadStrptrMaybe
 3403// Read fields of emdi12::QuoteCondition from an ascii string.
 3404// The format of the string is the format of the emdi12::QuoteCondition's only field
 3405bool emdi12::QuoteCondition_ReadStrptrMaybe(emdi12::QuoteCondition &parent, algo::strptr in_str) {
 3406    bool retval = true;
 3407    retval = retval && value_ReadStrptrMaybe(parent, in_str);
 3408    return retval;
 3409}
 3410
 3411// --- emdi12.QuoteCondition..Print
 3412// print string representation of ROW to string STR
 3413// cfmt:emdi12.QuoteCondition.String  printfmt:Raw
 3414void emdi12::QuoteCondition_Print(emdi12::QuoteCondition row, algo::cstring& str) {
 3415    emdi12::value_Print(row, str);
 3416}
 3417
 3418// --- emdi12.TrdType.value.ToCstr
 3419// Convert numeric value of field to one of predefined string constants.
 3420// If string is found, return a static C string. Otherwise, return NULL.
 3421const char* emdi12::value_ToCstr(const emdi12::TrdType& parent) {
 3422    const char *ret = NULL;
 3423    switch(value_GetEnum(parent)) {
 3424        case emdi12_TrdType_0              : ret = "0";  break;
 3425        case emdi12_TrdType_1              : ret = "1";  break;
 3426        case emdi12_TrdType_2              : ret = "2";  break;
 3427        case emdi12_TrdType_12             : ret = "12";  break;
 3428        case emdi12_TrdType_50             : ret = "50";  break;
 3429        case emdi12_TrdType_54             : ret = "54";  break;
 3430        case emdi12_TrdType_55             : ret = "55";  break;
 3431        case emdi12_TrdType_1000           : ret = "1000";  break;
 3432        case emdi12_TrdType_1001           : ret = "1001";  break;
 3433        case emdi12_TrdType_1002           : ret = "1002";  break;
 3434        case emdi12_TrdType_1004           : ret = "1004";  break;
 3435        case emdi12_TrdType_1006           : ret = "1006";  break;
 3436        case emdi12_TrdType_1007           : ret = "1007";  break;
 3437        case emdi12_TrdType_1017           : ret = "1017";  break;
 3438        case emdi12_TrdType_1100           : ret = "1100";  break;
 3439        case emdi12_TrdType_1101           : ret = "1101";  break;
 3440        case emdi12_TrdType_1102           : ret = "1102";  break;
 3441        case emdi12_TrdType_1103           : ret = "1103";  break;
 3442        case emdi12_TrdType_1104           : ret = "1104";  break;
 3443        case emdi12_TrdType_1107           : ret = "1107";  break;
 3444        case emdi12_TrdType_1108           : ret = "1108";  break;
 3445    }
 3446    return ret;
 3447}
 3448
 3449// --- emdi12.TrdType.value.Print
 3450// Convert value to a string. First, attempt conversion to a known string.
 3451// If no string matches, print value as a numeric value.
 3452void emdi12::value_Print(const emdi12::TrdType& parent, algo::cstring &lhs) {
 3453    const char *strval = value_ToCstr(parent);
 3454    if (strval) {
 3455        lhs << strval;
 3456    } else {
 3457        lhs << parent.value;
 3458    }
 3459}
 3460
 3461// --- emdi12.TrdType.value.SetStrptrMaybe
 3462// Convert string to field.
 3463// If the string is invalid, do not modify field and return false.
 3464// In case of success, return true
 3465bool emdi12::value_SetStrptrMaybe(emdi12::TrdType& parent, algo::strptr rhs) {
 3466    bool ret = false;
 3467    switch (elems_N(rhs)) {
 3468        case 1: {
 3469            switch (u64(rhs[0])) {
 3470                case '0': {
 3471                    value_SetEnum(parent,emdi12_TrdType_0); ret = true; break;
 3472                }
 3473                case '1': {
 3474                    value_SetEnum(parent,emdi12_TrdType_1); ret = true; break;
 3475                }
 3476                case '2': {
 3477                    value_SetEnum(parent,emdi12_TrdType_2); ret = true; break;
 3478                }
 3479            }
 3480            break;
 3481        }
 3482        case 2: {
 3483            switch (u64(algo::ReadLE16(rhs.elems))) {
 3484                case LE_STR2('1','2'): {
 3485                    value_SetEnum(parent,emdi12_TrdType_12); ret = true; break;
 3486                }
 3487                case LE_STR2('5','0'): {
 3488                    value_SetEnum(parent,emdi12_TrdType_50); ret = true; break;
 3489                }
 3490                case LE_STR2('5','4'): {
 3491                    value_SetEnum(parent,emdi12_TrdType_54); ret = true; break;
 3492                }
 3493                case LE_STR2('5','5'): {
 3494                    value_SetEnum(parent,emdi12_TrdType_55); ret = true; break;
 3495                }
 3496            }
 3497            break;
 3498        }
 3499        case 4: {
 3500            switch (u64(algo::ReadLE32(rhs.elems))) {
 3501                case LE_STR4('1','0','0','0'): {
 3502                    value_SetEnum(parent,emdi12_TrdType_1000); ret = true; break;
 3503                }
 3504                case LE_STR4('1','0','0','1'): {
 3505                    value_SetEnum(parent,emdi12_TrdType_1001); ret = true; break;
 3506                }
 3507                case LE_STR4('1','0','0','2'): {
 3508                    value_SetEnum(parent,emdi12_TrdType_1002); ret = true; break;
 3509                }
 3510                case LE_STR4('1','0','0','4'): {
 3511                    value_SetEnum(parent,emdi12_TrdType_1004); ret = true; break;
 3512                }
 3513                case LE_STR4('1','0','0','6'): {
 3514                    value_SetEnum(parent,emdi12_TrdType_1006); ret = true; break;
 3515                }
 3516                case LE_STR4('1','0','0','7'): {
 3517                    value_SetEnum(parent,emdi12_TrdType_1007); ret = true; break;
 3518                }
 3519                case LE_STR4('1','0','1','7'): {
 3520                    value_SetEnum(parent,emdi12_TrdType_1017); ret = true; break;
 3521                }
 3522                case LE_STR4('1','1','0','0'): {
 3523                    value_SetEnum(parent,emdi12_TrdType_1100); ret = true; break;
 3524                }
 3525                case LE_STR4('1','1','0','1'): {
 3526                    value_SetEnum(parent,emdi12_TrdType_1101); ret = true; break;
 3527                }
 3528                case LE_STR4('1','1','0','2'): {
 3529                    value_SetEnum(parent,emdi12_TrdType_1102); ret = true; break;
 3530                }
 3531                case LE_STR4('1','1','0','3'): {
 3532                    value_SetEnum(parent,emdi12_TrdType_1103); ret = true; break;
 3533                }
 3534                case LE_STR4('1','1','0','4'): {
 3535                    value_SetEnum(parent,emdi12_TrdType_1104); ret = true; break;
 3536                }
 3537                case LE_STR4('1','1','0','7'): {
 3538                    value_SetEnum(parent,emdi12_TrdType_1107); ret = true; break;
 3539                }
 3540                case LE_STR4('1','1','0','8'): {
 3541                    value_SetEnum(parent,emdi12_TrdType_1108); ret = true; break;
 3542                }
 3543            }
 3544            break;
 3545        }
 3546    }
 3547    return ret;
 3548}
 3549
 3550// --- emdi12.TrdType.value.SetStrptr
 3551// Convert string to field.
 3552// If the string is invalid, set numeric value to DFLT
 3553void emdi12::value_SetStrptr(emdi12::TrdType& parent, algo::strptr rhs, emdi12_TrdTypeEnum dflt) {
 3554    if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
 3555}
 3556
 3557// --- emdi12.TrdType.value.ReadStrptrMaybe
 3558// Convert string to field. Return success value
 3559bool emdi12::value_ReadStrptrMaybe(emdi12::TrdType& parent, algo::strptr rhs) {
 3560    bool retval = false;
 3561    retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
 3562    if (!retval) { // didn't work? try reading as underlying type
 3563        retval = u32_ReadStrptrMaybe(parent.value,rhs);
 3564    }
 3565    return retval;
 3566}
 3567
 3568// --- emdi12.TrdType..ReadStrptrMaybe
 3569// Read fields of emdi12::TrdType from an ascii string.
 3570// The format of the string is the format of the emdi12::TrdType's only field
 3571bool emdi12::TrdType_ReadStrptrMaybe(emdi12::TrdType &parent, algo::strptr in_str) {
 3572    bool retval = true;
 3573    retval = retval && value_ReadStrptrMaybe(parent, in_str);
 3574    return retval;
 3575}
 3576
 3577// --- emdi12.TrdType..Print
 3578// print string representation of ROW to string STR
 3579// cfmt:emdi12.TrdType.String  printfmt:Raw
 3580void emdi12::TrdType_Print(emdi12::TrdType row, algo::cstring& str) {
 3581    emdi12::value_Print(row, str);
 3582}
 3583
 3584// --- emdi12.TradeConditionSet.U.ReadStrptrMaybe
 3585inline static bool emdi12::U_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) {
 3586    bool retval = true;
 3587    bool U_tmp;
 3588    retval = bool_ReadStrptrMaybe(U_tmp, in_str);
 3589    if (retval) {
 3590        U_Set(parent, U_tmp);
 3591    }
 3592    return retval;
 3593}
 3594
 3595// --- emdi12.TradeConditionSet.R.ReadStrptrMaybe
 3596inline static bool emdi12::R_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) {
 3597    bool retval = true;
 3598    bool R_tmp;
 3599    retval = bool_ReadStrptrMaybe(R_tmp, in_str);
 3600    if (retval) {
 3601        R_Set(parent, R_tmp);
 3602    }
 3603    return retval;
 3604}
 3605
 3606// --- emdi12.TradeConditionSet.AX.ReadStrptrMaybe
 3607inline static bool emdi12::AX_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) {
 3608    bool retval = true;
 3609    bool AX_tmp;
 3610    retval = bool_ReadStrptrMaybe(AX_tmp, in_str);
 3611    if (retval) {
 3612        AX_Set(parent, AX_tmp);
 3613    }
 3614    return retval;
 3615}
 3616
 3617// --- emdi12.TradeConditionSet.AY.ReadStrptrMaybe
 3618inline static bool emdi12::AY_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) {
 3619    bool retval = true;
 3620    bool AY_tmp;
 3621    retval = bool_ReadStrptrMaybe(AY_tmp, in_str);
 3622    if (retval) {
 3623        AY_Set(parent, AY_tmp);
 3624    }
 3625    return retval;
 3626}
 3627
 3628// --- emdi12.TradeConditionSet.AJ.ReadStrptrMaybe
 3629inline static bool emdi12::AJ_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) {
 3630    bool retval = true;
 3631    bool AJ_tmp;
 3632    retval = bool_ReadStrptrMaybe(AJ_tmp, in_str);
 3633    if (retval) {
 3634        AJ_Set(parent, AJ_tmp);
 3635    }
 3636    return retval;
 3637}
 3638
 3639// --- emdi12.TradeConditionSet.AW.ReadStrptrMaybe
 3640inline static bool emdi12::AW_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) {
 3641    bool retval = true;
 3642    bool AW_tmp;
 3643    retval = bool_ReadStrptrMaybe(AW_tmp, in_str);
 3644    if (retval) {
 3645        AW_Set(parent, AW_tmp);
 3646    }
 3647    return retval;
 3648}
 3649
 3650// --- emdi12.TradeConditionSet.k.ReadStrptrMaybe
 3651inline static bool emdi12::k_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) {
 3652    bool retval = true;
 3653    bool k_tmp;
 3654    retval = bool_ReadStrptrMaybe(k_tmp, in_str);
 3655    if (retval) {
 3656        k_Set(parent, k_tmp);
 3657    }
 3658    return retval;
 3659}
 3660
 3661// --- emdi12.TradeConditionSet.BD.ReadStrptrMaybe
 3662inline static bool emdi12::BD_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) {
 3663    bool retval = true;
 3664    bool BD_tmp;
 3665    retval = bool_ReadStrptrMaybe(BD_tmp, in_str);
 3666    if (retval) {
 3667        BD_Set(parent, BD_tmp);
 3668    }
 3669    return retval;
 3670}
 3671
 3672// --- emdi12.TradeConditionSet.a.ReadStrptrMaybe
 3673inline static bool emdi12::a_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) {
 3674    bool retval = true;
 3675    bool a_tmp;
 3676    retval = bool_ReadStrptrMaybe(a_tmp, in_str);
 3677    if (retval) {
 3678        a_Set(parent, a_tmp);
 3679    }
 3680    return retval;
 3681}
 3682
 3683// --- emdi12.TradeConditionSet.BC.ReadStrptrMaybe
 3684inline static bool emdi12::BC_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) {
 3685    bool retval = true;
 3686    bool BC_tmp;
 3687    retval = bool_ReadStrptrMaybe(BC_tmp, in_str);
 3688    if (retval) {
 3689        BC_Set(parent, BC_tmp);
 3690    }
 3691    return retval;
 3692}
 3693
 3694// --- emdi12.TradeConditionSet.SA.ReadStrptrMaybe
 3695inline static bool emdi12::SA_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) {
 3696    bool retval = true;
 3697    bool SA_tmp;
 3698    retval = bool_ReadStrptrMaybe(SA_tmp, in_str);
 3699    if (retval) {
 3700        SA_Set(parent, SA_tmp);
 3701    }
 3702    return retval;
 3703}
 3704
 3705// --- emdi12.TradeConditionSet.TC.ReadStrptrMaybe
 3706inline static bool emdi12::TC_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) {
 3707    bool retval = true;
 3708    bool TC_tmp;
 3709    retval = bool_ReadStrptrMaybe(TC_tmp, in_str);
 3710    if (retval) {
 3711        TC_Set(parent, TC_tmp);
 3712    }
 3713    return retval;
 3714}
 3715
 3716// --- emdi12.TradeConditionSet.XR.ReadStrptrMaybe
 3717inline static bool emdi12::XR_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) {
 3718    bool retval = true;
 3719    bool XR_tmp;
 3720    retval = bool_ReadStrptrMaybe(XR_tmp, in_str);
 3721    if (retval) {
 3722        XR_Set(parent, XR_tmp);
 3723    }
 3724    return retval;
 3725}
 3726
 3727// --- emdi12.TradeConditionSet..ReadFieldMaybe
 3728bool emdi12::TradeConditionSet_ReadFieldMaybe(emdi12::TradeConditionSet& parent, algo::strptr field, algo::strptr strval) {
 3729    bool retval = true;
 3730    emdi12::FieldId field_id;
 3731    (void)value_SetStrptrMaybe(field_id,field);
 3732    switch(field_id) {
 3733        case emdi12_FieldId_value: {
 3734            retval = u32_ReadStrptrMaybe(parent.value, strval);
 3735            break;
 3736        }
 3737        case emdi12_FieldId_U: {
 3738            retval = U_ReadStrptrMaybe(parent, strval);
 3739            break;
 3740        }
 3741        case emdi12_FieldId_R: {
 3742            retval = R_ReadStrptrMaybe(parent, strval);
 3743            break;
 3744        }
 3745        case emdi12_FieldId_AX: {
 3746            retval = AX_ReadStrptrMaybe(parent, strval);
 3747            break;
 3748        }
 3749        case emdi12_FieldId_AY: {
 3750            retval = AY_ReadStrptrMaybe(parent, strval);
 3751            break;
 3752        }
 3753        case emdi12_FieldId_AJ: {
 3754            retval = AJ_ReadStrptrMaybe(parent, strval);
 3755            break;
 3756        }
 3757        case emdi12_FieldId_AW: {
 3758            retval = AW_ReadStrptrMaybe(parent, strval);
 3759            break;
 3760        }
 3761        case emdi12_FieldId_k: {
 3762            retval = k_ReadStrptrMaybe(parent, strval);
 3763            break;
 3764        }
 3765        case emdi12_FieldId_BD: {
 3766            retval = BD_ReadStrptrMaybe(parent, strval);
 3767            break;
 3768        }
 3769        case emdi12_FieldId_a: {
 3770            retval = a_ReadStrptrMaybe(parent, strval);
 3771            break;
 3772        }
 3773        case emdi12_FieldId_BC: {
 3774            retval = BC_ReadStrptrMaybe(parent, strval);
 3775            break;
 3776        }
 3777        case emdi12_FieldId_SA: {
 3778            retval = SA_ReadStrptrMaybe(parent, strval);
 3779            break;
 3780        }
 3781        case emdi12_FieldId_TC: {
 3782            retval = TC_ReadStrptrMaybe(parent, strval);
 3783            break;
 3784        }
 3785        case emdi12_FieldId_XR: {
 3786            retval = XR_ReadStrptrMaybe(parent, strval);
 3787            break;
 3788        }
 3789        default: break;
 3790    }
 3791    if (!retval) {
 3792        algo_lib::AppendErrtext("attr",field);
 3793    }
 3794    return retval;
 3795}
 3796
 3797// --- emdi12.TradeConditionSet..ReadStrptrMaybe
 3798// Read fields of emdi12::TradeConditionSet from an ascii string.
 3799bool emdi12::TradeConditionSet_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) {
 3800    bool retval = true;
 3801    // Clear affected bits first)
 3802    U_Set(parent, false);
 3803    R_Set(parent, false);
 3804    AX_Set(parent, false);
 3805    AY_Set(parent, false);
 3806    AJ_Set(parent, false);
 3807    AW_Set(parent, false);
 3808    k_Set(parent, false);
 3809    BD_Set(parent, false);
 3810    a_Set(parent, false);
 3811    BC_Set(parent, false);
 3812    SA_Set(parent, false);
 3813    TC_Set(parent, false);
 3814    XR_Set(parent, false);
 3815    // Read ' '-separated list of bools
 3816    while (ch_N(in_str)) {
 3817        strptr field_name;
 3818        algo::NextSep(in_str,' ',field_name);
 3819        field_name = algo::Trimmed(field_name);
 3820        if (ch_N(field_name)) {
 3821            emdi12::FieldId field_id;
 3822            bool ok = emdi12::value_SetStrptrMaybe(field_id,field_name);
 3823            if (ok) {
 3824                switch (field_id) {
 3825                    case emdi12_FieldId_U: {
 3826                        U_Set(parent, true);
 3827                    } break;
 3828                    case emdi12_FieldId_R: {
 3829                        R_Set(parent, true);
 3830                    } break;
 3831                    case emdi12_FieldId_AX: {
 3832                        AX_Set(parent, true);
 3833                    } break;
 3834                    case emdi12_FieldId_AY: {
 3835                        AY_Set(parent, true);
 3836                    } break;
 3837                    case emdi12_FieldId_AJ: {
 3838                        AJ_Set(parent, true);
 3839                    } break;
 3840                    case emdi12_FieldId_AW: {
 3841                        AW_Set(parent, true);
 3842                    } break;
 3843                    case emdi12_FieldId_k: {
 3844                        k_Set(parent, true);
 3845                    } break;
 3846                    case emdi12_FieldId_BD: {
 3847                        BD_Set(parent, true);
 3848                    } break;
 3849                    case emdi12_FieldId_a: {
 3850                        a_Set(parent, true);
 3851                    } break;
 3852                    case emdi12_FieldId_BC: {
 3853                        BC_Set(parent, true);
 3854                    } break;
 3855                    case emdi12_FieldId_SA: {
 3856                        SA_Set(parent, true);
 3857                    } break;
 3858                    case emdi12_FieldId_TC: {
 3859                        TC_Set(parent, true);
 3860                    } break;
 3861                    case emdi12_FieldId_XR: {
 3862                        XR_Set(parent, true);
 3863                    } break;
 3864                    default: ok = false; break;
 3865                }
 3866            }
 3867            if (!ok) {
 3868                algo_lib::AppendErrtext("bitfld",field_name);
 3869                retval = false;
 3870            }
 3871        }
 3872    }
 3873    return retval;
 3874}
 3875
 3876// --- emdi12.TradeConditionSet..Init
 3877// Set all fields to initial values.
 3878void emdi12::TradeConditionSet_Init(emdi12::TradeConditionSet& parent) {
 3879    parent.value = u32(0);
 3880}
 3881
 3882// --- emdi12.TradeConditionSet..Print
 3883// print string representation of ROW to string STR
 3884// cfmt:emdi12.TradeConditionSet.String  printfmt:Bitset
 3885void emdi12::TradeConditionSet_Print(emdi12::TradeConditionSet row, algo::cstring& str) {
 3886    algo::ListSep ls(" ");
 3887    if (U_Get(row)) {
 3888        str << ls << "U";
 3889    }
 3890    if (R_Get(row)) {
 3891        str << ls << "R";
 3892    }
 3893    if (AX_Get(row)) {
 3894        str << ls << "AX";
 3895    }
 3896    if (AY_Get(row)) {
 3897        str << ls << "AY";
 3898    }
 3899    if (AJ_Get(row)) {
 3900        str << ls << "AJ";
 3901    }
 3902    if (AW_Get(row)) {
 3903        str << ls << "AW";
 3904    }
 3905    if (k_Get(row)) {
 3906        str << ls << "k";
 3907    }
 3908    if (BD_Get(row)) {
 3909        str << ls << "BD";
 3910    }
 3911    if (a_Get(row)) {
 3912        str << ls << "a";
 3913    }
 3914    if (BC_Get(row)) {
 3915        str << ls << "BC";
 3916    }
 3917    if (SA_Get(row)) {
 3918        str << ls << "SA";
 3919    }
 3920    if (TC_Get(row)) {
 3921        str << ls << "TC";
 3922    }
 3923    if (XR_Get(row)) {
 3924        str << ls << "XR";
 3925    }
 3926}
 3927
 3928// --- emdi12.MultiLegReportingType.value.ToCstr
 3929// Convert numeric value of field to one of predefined string constants.
 3930// If string is found, return a static C string. Otherwise, return NULL.
 3931const char* emdi12::value_ToCstr(const emdi12::MultiLegReportingType& parent) {
 3932    const char *ret = NULL;
 3933    switch(value_GetEnum(parent)) {
 3934        case emdi12_MultiLegReportingType_1: ret = "1";  break;
 3935        case emdi12_MultiLegReportingType_2: ret = "2";  break;
 3936        case emdi12_MultiLegReportingType_3: ret = "3";  break;
 3937    }
 3938    return ret;
 3939}
 3940
 3941// --- emdi12.MultiLegReportingType.value.Print
 3942// Convert value to a string. First, attempt conversion to a known string.
 3943// If no string matches, print value as a numeric value.
 3944void emdi12::value_Print(const emdi12::MultiLegReportingType& parent, algo::cstring &lhs) {
 3945    const char *strval = value_ToCstr(parent);
 3946    if (strval) {
 3947        lhs << strval;
 3948    } else {
 3949        lhs << parent.value;
 3950    }
 3951}
 3952
 3953// --- emdi12.MultiLegReportingType.value.SetStrptrMaybe
 3954// Convert string to field.
 3955// If the string is invalid, do not modify field and return false.
 3956// In case of success, return true
 3957bool emdi12::value_SetStrptrMaybe(emdi12::MultiLegReportingType& parent, algo::strptr rhs) {
 3958    bool ret = false;
 3959    switch (elems_N(rhs)) {
 3960        case 1: {
 3961            switch (u64(rhs[0])) {
 3962                case '1': {
 3963                    value_SetEnum(parent,emdi12_MultiLegReportingType_1); ret = true; break;
 3964                }
 3965                case '2': {
 3966                    value_SetEnum(parent,emdi12_MultiLegReportingType_2); ret = true; break;
 3967                }
 3968                case '3': {
 3969                    value_SetEnum(parent,emdi12_MultiLegReportingType_3); ret = true; break;
 3970                }
 3971            }
 3972            break;
 3973        }
 3974    }
 3975    return ret;
 3976}
 3977
 3978// --- emdi12.MultiLegReportingType.value.SetStrptr
 3979// Convert string to field.
 3980// If the string is invalid, set numeric value to DFLT
 3981void emdi12::value_SetStrptr(emdi12::MultiLegReportingType& parent, algo::strptr rhs, emdi12_MultiLegReportingTypeEnum dflt) {
 3982    if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
 3983}
 3984
 3985// --- emdi12.MultiLegReportingType.value.ReadStrptrMaybe
 3986// Convert string to field. Return success value
 3987bool emdi12::value_ReadStrptrMaybe(emdi12::MultiLegReportingType& parent, algo::strptr rhs) {
 3988    bool retval = false;
 3989    retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
 3990    if (!retval) { // didn't work? try reading as underlying type
 3991        retval = u32_ReadStrptrMaybe(parent.value,rhs);
 3992    }
 3993    return retval;
 3994}
 3995
 3996// --- emdi12.MultiLegReportingType..ReadStrptrMaybe
 3997// Read fields of emdi12::MultiLegReportingType from an ascii string.
 3998// The format of the string is the format of the emdi12::MultiLegReportingType's only field
 3999bool emdi12::MultiLegReportingType_ReadStrptrMaybe(emdi12::MultiLegReportingType &parent, algo::strptr in_str) {
 4000    bool retval = true;
 4001    retval = retval && value_ReadStrptrMaybe(parent, in_str);
 4002    return retval;
 4003}
 4004
 4005// --- emdi12.MultiLegReportingType..Print
 4006// print string representation of ROW to string STR
 4007// cfmt:emdi12.MultiLegReportingType.String  printfmt:Raw
 4008void emdi12::MultiLegReportingType_Print(emdi12::MultiLegReportingType row, algo::cstring& str) {
 4009    emdi12::value_Print(row, str);
 4010}
 4011
 4012// --- emdi12.MultiLegPriceModel.value.ToCstr
 4013// Convert numeric value of field to one of predefined string constants.
 4014// If string is found, return a static C string. Otherwise, return NULL.
 4015const char* emdi12::value_ToCstr(const emdi12::MultiLegPriceModel& parent) {
 4016    const char *ret = NULL;
 4017    switch(value_GetEnum(parent)) {
 4018        case emdi12_MultiLegPriceModel_0   : ret = "0";  break;
 4019        case emdi12_MultiLegPriceModel_1   : ret = "1";  break;
 4020    }
 4021    return ret;
 4022}
 4023
 4024// --- emdi12.MultiLegPriceModel.value.Print
 4025// Convert value to a string. First, attempt conversion to a known string.
 4026// If no string matches, print value as a numeric value.
 4027void emdi12::value_Print(const emdi12::MultiLegPriceModel& parent, algo::cstring &lhs) {
 4028    const char *strval = value_ToCstr(parent);
 4029    if (strval) {
 4030        lhs << strval;
 4031    } else {
 4032        lhs << parent.value;
 4033    }
 4034}
 4035
 4036// --- emdi12.MultiLegPriceModel.value.SetStrptrMaybe
 4037// Convert string to field.
 4038// If the string is invalid, do not modify field and return false.
 4039// In case of success, return true
 4040bool emdi12::value_SetStrptrMaybe(emdi12::MultiLegPriceModel& parent, algo::strptr rhs) {
 4041    bool ret = false;
 4042    switch (elems_N(rhs)) {
 4043        case 1: {
 4044            switch (u64(rhs[0])) {
 4045                case '0': {
 4046                    value_SetEnum(parent,emdi12_MultiLegPriceModel_0); ret = true; break;
 4047                }
 4048                case '1': {
 4049                    value_SetEnum(parent,emdi12_MultiLegPriceModel_1); ret = true; break;
 4050                }
 4051            }
 4052            break;
 4053        }
 4054    }
 4055    return ret;
 4056}
 4057
 4058// --- emdi12.MultiLegPriceModel.value.SetStrptr
 4059// Convert string to field.
 4060// If the string is invalid, set numeric value to DFLT
 4061void emdi12::value_SetStrptr(emdi12::MultiLegPriceModel& parent, algo::strptr rhs, emdi12_MultiLegPriceModelEnum dflt) {
 4062    if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
 4063}
 4064
 4065// --- emdi12.MultiLegPriceModel.value.ReadStrptrMaybe
 4066// Convert string to field. Return success value
 4067bool emdi12::value_ReadStrptrMaybe(emdi12::MultiLegPriceModel& parent, algo::strptr rhs) {
 4068    bool retval = false;
 4069    retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
 4070    if (!retval) { // didn't work? try reading as underlying type
 4071        retval = u32_ReadStrptrMaybe(parent.value,rhs);
 4072    }
 4073    return retval;
 4074}
 4075
 4076// --- emdi12.MultiLegPriceModel..ReadStrptrMaybe
 4077// Read fields of emdi12::MultiLegPriceModel from an ascii string.
 4078// The format of the string is the format of the emdi12::MultiLegPriceModel's only field
 4079bool emdi12::MultiLegPriceModel_ReadStrptrMaybe(emdi12::MultiLegPriceModel &parent, algo::strptr in_str) {
 4080    bool retval = true;
 4081    retval = retval && value_ReadStrptrMaybe(parent, in_str);
 4082    return retval;
 4083}
 4084
 4085// --- emdi12.MultiLegPriceModel..Print
 4086// print string representation of ROW to string STR
 4087// cfmt:emdi12.MultiLegPriceModel.String  printfmt:Raw
 4088void emdi12::MultiLegPriceModel_Print(emdi12::MultiLegPriceModel row, algo::cstring& str) {
 4089    emdi12::value_Print(row, str);
 4090}
 4091
 4092// --- emdi12.TradeEntryGrp.TrdType.ReadStrptrMaybe
 4093inline static bool emdi12::TrdType_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) {
 4094    bool retval = true;
 4095    emdi12::TrdType TrdType_tmp;
 4096    retval = emdi12::TrdType_ReadStrptrMaybe(TrdType_tmp, in_str);
 4097    if (retval) {
 4098        TrdType_Set(parent, TrdType_tmp);
 4099    }
 4100    return retval;
 4101}
 4102
 4103// --- emdi12.TradeEntryGrp.AlgorithmicTradeIndicator.ReadStrptrMaybe
 4104inline static bool emdi12::AlgorithmicTradeIndicator_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) {
 4105    bool retval = true;
 4106    emdi12::AlgorithmicTradeIndicator AlgorithmicTradeIndicator_tmp;
 4107    retval = emdi12::AlgorithmicTradeIndicator_ReadStrptrMaybe(AlgorithmicTradeIndicator_tmp, in_str);
 4108    if (retval) {
 4109        AlgorithmicTradeIndicator_Set(parent, AlgorithmicTradeIndicator_tmp);
 4110    }
 4111    return retval;
 4112}
 4113
 4114// --- emdi12.TradeEntryGrp.TradeCondition.ReadStrptrMaybe
 4115inline static bool emdi12::TradeCondition_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) {
 4116    bool retval = true;
 4117    emdi12::TradeConditionSet TradeCondition_tmp;
 4118    retval = emdi12::TradeConditionSet_ReadStrptrMaybe(TradeCondition_tmp, in_str);
 4119    if (retval) {
 4120        TradeCondition_Set(parent, TradeCondition_tmp);
 4121    }
 4122    return retval;
 4123}
 4124
 4125// --- emdi12.TradeEntryGrp.MultiLegReportingType.ReadStrptrMaybe
 4126inline static bool emdi12::MultiLegReportingType_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) {
 4127    bool retval = true;
 4128    emdi12::MultiLegReportingType MultiLegReportingType_tmp;
 4129    retval = emdi12::MultiLegReportingType_ReadStrptrMaybe(MultiLegReportingType_tmp, in_str);
 4130    if (retval) {
 4131        MultiLegReportingType_Set(parent, MultiLegReportingType_tmp);
 4132    }
 4133    return retval;
 4134}
 4135
 4136// --- emdi12.TradeEntryGrp.MultiLegPriceModel.ReadStrptrMaybe
 4137inline static bool emdi12::MultiLegPriceModel_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) {
 4138    bool retval = true;
 4139    emdi12::MultiLegPriceModel MultiLegPriceModel_tmp;
 4140    retval = emdi12::MultiLegPriceModel_ReadStrptrMaybe(MultiLegPriceModel_tmp, in_str);
 4141    if (retval) {
 4142        MultiLegPriceModel_Set(parent, MultiLegPriceModel_tmp);
 4143    }
 4144    return retval;
 4145}
 4146
 4147// --- emdi12.TradeEntryGrp.AggressorTime.ReadStrptrMaybe
 4148inline static bool emdi12::AggressorTime_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) {
 4149    bool retval = true;
 4150    i64 AggressorTime_tmp;
 4151    retval = i64_ReadStrptrMaybe(AggressorTime_tmp, in_str);
 4152    if (retval) {
 4153        AggressorTime_Set(parent, AggressorTime_tmp);
 4154    }
 4155    return retval;
 4156}
 4157
 4158// --- emdi12.TradeEntryGrp.RequestTime.ReadStrptrMaybe
 4159inline static bool emdi12::RequestTime_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) {
 4160    bool retval = true;
 4161    i64 RequestTime_tmp;
 4162    retval = i64_ReadStrptrMaybe(RequestTime_tmp, in_str);
 4163    if (retval) {
 4164        RequestTime_Set(parent, RequestTime_tmp);
 4165    }
 4166    return retval;
 4167}
 4168
 4169// --- emdi12.TradeEntryGrp.AggressorSide.ReadStrptrMaybe
 4170inline static bool emdi12::AggressorSide_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) {
 4171    bool retval = true;
 4172    emdi12::Side AggressorSide_tmp;
 4173    retval = emdi12::Side_ReadStrptrMaybe(AggressorSide_tmp, in_str);
 4174    if (retval) {
 4175        AggressorSide_Set(parent, AggressorSide_tmp);
 4176    }
 4177    return retval;
 4178}
 4179
 4180// --- emdi12.TradeEntryGrp.NumberOfBuyOrders.ReadStrptrMaybe
 4181inline static bool emdi12::NumberOfBuyOrders_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) {
 4182    bool retval = true;
 4183    u32 NumberOfBuyOrders_tmp;
 4184    retval = u32_ReadStrptrMaybe(NumberOfBuyOrders_tmp, in_str);
 4185    if (retval) {
 4186        NumberOfBuyOrders_Set(parent, NumberOfBuyOrders_tmp);
 4187    }
 4188    return retval;
 4189}
 4190
 4191// --- emdi12.TradeEntryGrp.NumberOfSellOrders.ReadStrptrMaybe
 4192inline static bool emdi12::NumberOfSellOrders_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) {
 4193    bool retval = true;
 4194    u32 NumberOfSellOrders_tmp;
 4195    retval = u32_ReadStrptrMaybe(NumberOfSellOrders_tmp, in_str);
 4196    if (retval) {
 4197        NumberOfSellOrders_Set(parent, NumberOfSellOrders_tmp);
 4198    }
 4199    return retval;
 4200}
 4201
 4202// --- emdi12.TradeEntryGrp.TotalNumOfTrades.ReadStrptrMaybe
 4203inline static bool emdi12::TotalNumOfTrades_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) {
 4204    bool retval = true;
 4205    u32 TotalNumOfTrades_tmp;
 4206    retval = u32_ReadStrptrMaybe(TotalNumOfTrades_tmp, in_str);
 4207    if (retval) {
 4208        TotalNumOfTrades_Set(parent, TotalNumOfTrades_tmp);
 4209    }
 4210    return retval;
 4211}
 4212
 4213// --- emdi12.TradeEntryGrp.RestingCxlQty.ReadStrptrMaybe
 4214inline static bool emdi12::RestingCxlQty_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) {
 4215    bool retval = true;
 4216    algo::Decimal RestingCxlQty_tmp;
 4217    retval = algo::Decimal_ReadStrptrMaybe(RestingCxlQty_tmp, in_str);
 4218    if (retval) {
 4219        RestingCxlQty_Set(parent, RestingCxlQty_tmp);
 4220    }
 4221    return retval;
 4222}
 4223
 4224// --- emdi12.TradeEntryGrp.MDEntryID.ReadStrptrMaybe
 4225inline static bool emdi12::MDEntryID_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) {
 4226    bool retval = true;
 4227    u32 MDEntryID_tmp;
 4228    retval = u32_ReadStrptrMaybe(MDEntryID_tmp, in_str);
 4229    if (retval) {
 4230        MDEntryID_Set(parent, MDEntryID_tmp);
 4231    }
 4232    return retval;
 4233}
 4234
 4235// --- emdi12.TradeEntryGrp.NonDisclosedTradeVolume.ReadStrptrMaybe
 4236inline static bool emdi12::NonDisclosedTradeVolume_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) {
 4237    bool retval = true;
 4238    algo::Decimal NonDisclosedTradeVolume_tmp;
 4239    retval = algo::Decimal_ReadStrptrMaybe(NonDisclosedTradeVolume_tmp, in_str);
 4240    if (retval) {
 4241        NonDisclosedTradeVolume_Set(parent, NonDisclosedTradeVolume_tmp);
 4242    }
 4243    return retval;
 4244}
 4245
 4246// --- emdi12.TradeEntryGrp.pmask_bitcurs.Next
 4247// proceed to next item
 4248void emdi12::TradeEntryGrp_pmask_bitcurs_Next(TradeEntryGrp_pmask_bitcurs &curs) {
 4249    ++curs.bit;
 4250    int index = curs.bit / 32;
 4251    int offset = curs.bit % 32;
 4252    for (; index < curs.n_elems; ++index, offset = 0) {
 4253        u64 rest = curs.elems[index] >> offset;
 4254        if (rest) {
 4255            offset += algo::u64_BitScanForward(rest);
 4256            break;
 4257        }
 4258    }
 4259    curs.bit = index * 32 + offset;
 4260}
 4261
 4262// --- emdi12.TradeEntryGrp..ReadFieldMaybe
 4263bool emdi12::TradeEntryGrp_ReadFieldMaybe(emdi12::TradeEntryGrp& parent, algo::strptr field, algo::strptr strval) {
 4264    bool retval = true;
 4265    emdi12::FieldId field_id;
 4266    (void)value_SetStrptrMaybe(field_id,field);
 4267    switch(field_id) {
 4268        case emdi12_FieldId_pmask: {
 4269            retval = false;
 4270            break;
 4271        }
 4272        case emdi12_FieldId_TrdType: {
 4273            retval = TrdType_ReadStrptrMaybe(parent, strval);
 4274            if (retval) {
 4275                pmask_qSetBit(parent, 13);
 4276            }
 4277            break;
 4278        }
 4279        case emdi12_FieldId_AlgorithmicTradeIndicator: {
 4280            retval = AlgorithmicTradeIndicator_ReadStrptrMaybe(parent, strval);
 4281            if (retval) {
 4282                pmask_qSetBit(parent, 2);
 4283            }
 4284            break;
 4285        }
 4286        case emdi12_FieldId_TradeCondition: {
 4287            retval = TradeCondition_ReadStrptrMaybe(parent, strval);
 4288            if (retval) {
 4289                pmask_qSetBit(parent, 12);
 4290            }
 4291            break;
 4292        }
 4293        case emdi12_FieldId_MultiLegReportingType: {
 4294            retval = MultiLegReportingType_ReadStrptrMaybe(parent, strval);
 4295            if (retval) {
 4296                pmask_qSetBit(parent, 5);
 4297            }
 4298            break;
 4299        }
 4300        case emdi12_FieldId_MultiLegPriceModel: {
 4301            retval = MultiLegPriceModel_ReadStrptrMaybe(parent, strval);
 4302            if (retval) {
 4303                pmask_qSetBit(parent, 4);
 4304            }
 4305            break;
 4306        }
 4307        case emdi12_FieldId_AggressorTime: {
 4308            retval = AggressorTime_ReadStrptrMaybe(parent, strval);
 4309            if (retval) {
 4310                pmask_qSetBit(parent, 1);
 4311            }
 4312            break;
 4313        }
 4314        case emdi12_FieldId_RequestTime: {
 4315            retval = RequestTime_ReadStrptrMaybe(parent, strval);
 4316            if (retval) {
 4317                pmask_qSetBit(parent, 9);
 4318            }
 4319            break;
 4320        }
 4321        case emdi12_FieldId_AggressorSide: {
 4322            retval = AggressorSide_ReadStrptrMaybe(parent, strval);
 4323            if (retval) {
 4324                pmask_qSetBit(parent, 0);
 4325            }
 4326            break;
 4327        }
 4328        case emdi12_FieldId_NumberOfBuyOrders: {
 4329            retval = NumberOfBuyOrders_ReadStrptrMaybe(parent, strval);
 4330            if (retval) {
 4331                pmask_qSetBit(parent, 7);
 4332            }
 4333            break;
 4334        }
 4335        case emdi12_FieldId_NumberOfSellOrders: {
 4336            retval = NumberOfSellOrders_ReadStrptrMaybe(parent, strval);
 4337            if (retval) {
 4338                pmask_qSetBit(parent, 8);
 4339            }
 4340            break;
 4341        }
 4342        case emdi12_FieldId_TotalNumOfTrades: {
 4343            retval = TotalNumOfTrades_ReadStrptrMaybe(parent, strval);
 4344            if (retval) {
 4345                pmask_qSetBit(parent, 11);
 4346            }
 4347            break;
 4348        }
 4349        case emdi12_FieldId_RestingCxlQty: {
 4350            retval = RestingCxlQty_ReadStrptrMaybe(parent, strval);
 4351            if (retval) {
 4352                pmask_qSetBit(parent, 10);
 4353            }
 4354            break;
 4355        }
 4356        case emdi12_FieldId_MDEntryID: {
 4357            retval = MDEntryID_ReadStrptrMaybe(parent, strval);
 4358            if (retval) {
 4359                pmask_qSetBit(parent, 3);
 4360            }
 4361            break;
 4362        }
 4363        case emdi12_FieldId_NonDisclosedTradeVolume: {
 4364            retval = NonDisclosedTradeVolume_ReadStrptrMaybe(parent, strval);
 4365            if (retval) {
 4366                pmask_qSetBit(parent, 6);
 4367            }
 4368            break;
 4369        }
 4370        default: break;
 4371    }
 4372    if (!retval) {
 4373        algo_lib::AppendErrtext("attr",field);
 4374    }
 4375    return retval;
 4376}
 4377
 4378// --- emdi12.TradeEntryGrp..ReadStrptrMaybe
 4379// Read fields of emdi12::TradeEntryGrp from an ascii string.
 4380// The format of the string is an ssim Tuple
 4381bool emdi12::TradeEntryGrp_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) {
 4382    bool retval = true;
 4383    retval = algo::StripTypeTag(in_str, "emdi12.TradeEntryGrp");
 4384    ind_beg(algo::Attr_curs, attr, in_str) {
 4385        retval = retval && TradeEntryGrp_ReadFieldMaybe(parent, attr.name, attr.value);
 4386    }ind_end;
 4387    return retval;
 4388}
 4389
 4390// --- emdi12.TradeEntryGrp..Init
 4391// Set all fields to initial values.
 4392void emdi12::TradeEntryGrp_Init(emdi12::TradeEntryGrp& parent) {
 4393    parent.pmask = u32(0);
 4394    parent.AlgorithmicTradeIndicator = emdi12_AlgorithmicTradeIndicatorEnum(0);
 4395    parent.TradeCondition = emdi12::TradeConditionSet(1);
 4396    parent.MultiLegReportingType = emdi12_MultiLegReportingTypeEnum(1);
 4397    parent.MultiLegPriceModel = emdi12_MultiLegPriceModelEnum(0);
 4398    parent.AggressorTime = i64(0);
 4399    parent.RequestTime = i64(0);
 4400    parent.NumberOfBuyOrders = u32(0);
 4401    parent.NumberOfSellOrders = u32(0);
 4402    parent.TotalNumOfTrades = u32(0);
 4403    parent.RestingCxlQty = algo::Decimal(algo::Decimal(0,0));
 4404    parent.MDEntryID = u32(0);
 4405    parent.NonDisclosedTradeVolume = algo::Decimal(algo::Decimal(0,0));
 4406}
 4407
 4408// --- emdi12.TradeEntryGrp..Print
 4409// print string representation of ROW to string STR
 4410// cfmt:emdi12.TradeEntryGrp.String  printfmt:Tuple
 4411void emdi12::TradeEntryGrp_Print(emdi12::TradeEntryGrp& row, algo::cstring& str) {
 4412    algo::tempstr temp;
 4413    str << "emdi12.TradeEntryGrp";
 4414
 4415    if (TrdType_PresentQ(row)) {
 4416        emdi12::TrdType_Print(row.TrdType, temp);
 4417        PrintAttrSpaceReset(str,"TrdType", temp);
 4418    }
 4419
 4420    if (AlgorithmicTradeIndicator_PresentQ(row)) {
 4421        emdi12::AlgorithmicTradeIndicator_Print(row.AlgorithmicTradeIndicator, temp);
 4422        PrintAttrSpaceReset(str,"AlgorithmicTradeIndicator", temp);
 4423    }
 4424
 4425    if (TradeCondition_PresentQ(row)) {
 4426        emdi12::TradeConditionSet_Print(row.TradeCondition, temp);
 4427        PrintAttrSpaceReset(str,"TradeCondition", temp);
 4428    }
 4429
 4430    if (MultiLegReportingType_PresentQ(row)) {
 4431        emdi12::MultiLegReportingType_Print(row.MultiLegReportingType, temp);
 4432        PrintAttrSpaceReset(str,"MultiLegReportingType", temp);
 4433    }
 4434
 4435    if (MultiLegPriceModel_PresentQ(row)) {
 4436        emdi12::MultiLegPriceModel_Print(row.MultiLegPriceModel, temp);
 4437        PrintAttrSpaceReset(str,"MultiLegPriceModel", temp);
 4438    }
 4439
 4440    if (AggressorTime_PresentQ(row)) {
 4441        i64_Print(row.AggressorTime, temp);
 4442        PrintAttrSpaceReset(str,"AggressorTime", temp);
 4443    }
 4444
 4445    if (RequestTime_PresentQ(row)) {
 4446        i64_Print(row.RequestTime, temp);
 4447        PrintAttrSpaceReset(str,"RequestTime", temp);
 4448    }
 4449
 4450    if (AggressorSide_PresentQ(row)) {
 4451        emdi12::Side_Print(row.AggressorSide, temp);
 4452        PrintAttrSpaceReset(str,"AggressorSide", temp);
 4453    }
 4454
 4455    if (NumberOfBuyOrders_PresentQ(row)) {
 4456        u32_Print(row.NumberOfBuyOrders, temp);
 4457        PrintAttrSpaceReset(str,"NumberOfBuyOrders", temp);
 4458    }
 4459
 4460    if (NumberOfSellOrders_PresentQ(row)) {
 4461        u32_Print(row.NumberOfSellOrders, temp);
 4462        PrintAttrSpaceReset(str,"NumberOfSellOrders", temp);
 4463    }
 4464
 4465    if (TotalNumOfTrades_PresentQ(row)) {
 4466        u32_Print(row.TotalNumOfTrades, temp);
 4467        PrintAttrSpaceReset(str,"TotalNumOfTrades", temp);
 4468    }
 4469
 4470    if (RestingCxlQty_PresentQ(row)) {
 4471        algo::Decimal_Print(row.RestingCxlQty, temp);
 4472        PrintAttrSpaceReset(str,"RestingCxlQty", temp);
 4473    }
 4474
 4475    if (MDEntryID_PresentQ(row)) {
 4476        u32_Print(row.MDEntryID, temp);
 4477        PrintAttrSpaceReset(str,"MDEntryID", temp);
 4478    }
 4479
 4480    if (NonDisclosedTradeVolume_PresentQ(row)) {
 4481        algo::Decimal_Print(row.NonDisclosedTradeVolume, temp);
 4482        PrintAttrSpaceReset(str,"NonDisclosedTradeVolume", temp);
 4483    }
 4484}
 4485
 4486// --- emdi12.TradeEntryGrp..FastEncode
 4487void emdi12::TradeEntryGrp_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::TradeEntryGrp& parent) {
 4488    int index = ary_N(buf);
 4489    u64 pmap(0);
 4490    // TrdType type none optional
 4491    if (TrdType_PresentQ(parent)) {
 4492        lib_fast::EncodeUnsigned(buf,parent.TrdType.value,true);
 4493    } else {
 4494        lib_fast::EncodeNull(buf);
 4495    }
 4496    // AlgorithmicTradeIndicator type default optional
 4497    if (AlgorithmicTradeIndicator_PresentQ(parent)) {
 4498        if (parent.AlgorithmicTradeIndicator.value != 0) {
 4499            lib_fast::EncodeUnsigned(buf,parent.AlgorithmicTradeIndicator.value,true);
 4500            lib_fast::SetPmapBit(pmap,0);
 4501        }
 4502    } else {
 4503        lib_fast::EncodeNull(buf);
 4504        lib_fast::SetPmapBit(pmap,0);
 4505    }
 4506    // TradeCondition type default optional
 4507    if (TradeCondition_PresentQ(parent)) {
 4508        if (parent.TradeCondition.value != 1) {
 4509            lib_fast::EncodeUnsigned(buf,parent.TradeCondition.value,true);
 4510            lib_fast::SetPmapBit(pmap,1);
 4511        }
 4512    } else {
 4513        lib_fast::EncodeNull(buf);
 4514        lib_fast::SetPmapBit(pmap,1);
 4515    }
 4516    // MultiLegReportingType type default optional
 4517    if (MultiLegReportingType_PresentQ(parent)) {
 4518        if (parent.MultiLegReportingType.value != 1) {
 4519            lib_fast::EncodeUnsigned(buf,parent.MultiLegReportingType.value,true);
 4520            lib_fast::SetPmapBit(pmap,2);
 4521        }
 4522    } else {
 4523        lib_fast::EncodeNull(buf);
 4524        lib_fast::SetPmapBit(pmap,2);
 4525    }
 4526    // MultiLegPriceModel type default optional
 4527    if (MultiLegPriceModel_PresentQ(parent)) {
 4528        if (parent.MultiLegPriceModel.value != 0) {
 4529            lib_fast::EncodeUnsigned(buf,parent.MultiLegPriceModel.value,true);
 4530            lib_fast::SetPmapBit(pmap,3);
 4531        }
 4532    } else {
 4533        lib_fast::EncodeNull(buf);
 4534        lib_fast::SetPmapBit(pmap,3);
 4535    }
 4536    // AggressorTime signed none optional
 4537    if (AggressorTime_PresentQ(parent)) {
 4538        lib_fast::EncodeSigned(buf,parent.AggressorTime,true);
 4539    } else {
 4540        lib_fast::EncodeNull(buf);
 4541    }
 4542    // RequestTime signed none optional
 4543    if (RequestTime_PresentQ(parent)) {
 4544        lib_fast::EncodeSigned(buf,parent.RequestTime,true);
 4545    } else {
 4546        lib_fast::EncodeNull(buf);
 4547    }
 4548    // AggressorSide type none optional
 4549    if (AggressorSide_PresentQ(parent)) {
 4550        lib_fast::EncodeUnsigned(buf,parent.AggressorSide.value,true);
 4551    } else {
 4552        lib_fast::EncodeNull(buf);
 4553    }
 4554    // NumberOfBuyOrders unsigned none optional
 4555    if (NumberOfBuyOrders_PresentQ(parent)) {
 4556        lib_fast::EncodeUnsigned(buf,parent.NumberOfBuyOrders,true);
 4557    } else {
 4558        lib_fast::EncodeNull(buf);
 4559    }
 4560    // NumberOfSellOrders unsigned none optional
 4561    if (NumberOfSellOrders_PresentQ(parent)) {
 4562        lib_fast::EncodeUnsigned(buf,parent.NumberOfSellOrders,true);
 4563    } else {
 4564        lib_fast::EncodeNull(buf);
 4565    }
 4566    // TotalNumOfTrades unsigned none optional
 4567    if (TotalNumOfTrades_PresentQ(parent)) {
 4568        lib_fast::EncodeUnsigned(buf,parent.TotalNumOfTrades,true);
 4569    } else {
 4570        lib_fast::EncodeNull(buf);
 4571    }
 4572    // RestingCxlQty scaled none optional
 4573    if (RestingCxlQty_PresentQ(parent)) {
 4574        lib_fast::EncodeScaled(buf,parent.RestingCxlQty,true);
 4575    } else {
 4576        lib_fast::EncodeNull(buf);
 4577    }
 4578    // MDEntryID unsigned delta optional
 4579    if (!MDEntryID_AssignedQ(state)) {
 4580        MDEntryID_SetAssigned(state);
 4581        present_qSetBitVal(state,MDEntryID_Present_GetBit(state),MDEntryID_PresentQ(parent));
 4582        state.MDEntryID = 0;
 4583    }
 4584    if (MDEntryID_PresentQ(parent)) {
 4585        if (!MDEntryID_PresentQ(state)) {
 4586            state.MDEntryID = 0;
 4587        }
 4588        lib_fast::EncodeDeltaUnsigned(buf,state.MDEntryID,parent.MDEntryID,true);
 4589    } else {
 4590        lib_fast::EncodeNull(buf);
 4591    }
 4592    state.MDEntryID = parent.MDEntryID;
 4593    present_qSetBitVal(state,MDEntryID_Present_GetBit(state),MDEntryID_PresentQ(parent));
 4594    // NonDisclosedTradeVolume scaled none optional
 4595    if (NonDisclosedTradeVolume_PresentQ(parent)) {
 4596        lib_fast::EncodeScaled(buf,parent.NonDisclosedTradeVolume,true);
 4597    } else {
 4598        lib_fast::EncodeNull(buf);
 4599    }
 4600    lib_fast::InsertPmap(buf,index,pmap);
 4601}
 4602
 4603// --- emdi12.TradeEntryGrp..FastDecode
 4604bool emdi12::TradeEntryGrp_FastDecode(algo::memptr& from, FastState& state, emdi12::TradeEntryGrp& parent) {
 4605    bool ok = true;
 4606    u64 pmap;
 4607    ok = lib_fast::DecodePmap(from,pmap);
 4608    if (!ok) {
 4609        state.error << "emdi12.TradeEntryGrp: bad pmap" << eol;
 4610    }
 4611    // TrdType type none optional
 4612    if (ok) {
 4613        bool prs = !lib_fast::DecodeNull(from);
 4614        if (prs) {
 4615            ok = lib_fast::DecodeUnsigned(from,parent.TrdType.value,true);
 4616            if (!ok) {
 4617                state.error << "emdi12.TradeEntryGrp.TrdType: bad Unsigned" << eol;
 4618            }
 4619        }
 4620        pmask_qSetBitVal(parent,TrdType_Present_GetBit(parent),prs);
 4621    }
 4622    // AlgorithmicTradeIndicator type default optional
 4623    if (ok) {
 4624        bool prs = lib_fast::GetPmapBit(pmap,0);
 4625        if (prs) {
 4626            prs = !lib_fast::DecodeNull(from);
 4627            if (prs) {
 4628                ok = lib_fast::DecodeUnsigned(from,parent.AlgorithmicTradeIndicator.value,true);
 4629                if (!ok) {
 4630                    state.error << "emdi12.TradeEntryGrp.AlgorithmicTradeIndicator: bad Unsigned" << eol;
 4631                }
 4632            }
 4633        } else {
 4634            parent.AlgorithmicTradeIndicator.value = 0;
 4635            prs = true;
 4636        }
 4637        pmask_qSetBitVal(parent,AlgorithmicTradeIndicator_Present_GetBit(parent),prs);
 4638    }
 4639    // TradeCondition type default optional
 4640    if (ok) {
 4641        bool prs = lib_fast::GetPmapBit(pmap,1);
 4642        if (prs) {
 4643            prs = !lib_fast::DecodeNull(from);
 4644            if (prs) {
 4645                ok = lib_fast::DecodeUnsigned(from,parent.TradeCondition.value,true);
 4646                if (!ok) {
 4647                    state.error << "emdi12.TradeEntryGrp.TradeCondition: bad Unsigned" << eol;
 4648                }
 4649            }
 4650        } else {
 4651            parent.TradeCondition.value = 1;
 4652            prs = true;
 4653        }
 4654        pmask_qSetBitVal(parent,TradeCondition_Present_GetBit(parent),prs);
 4655    }
 4656    // MultiLegReportingType type default optional
 4657    if (ok) {
 4658        bool prs = lib_fast::GetPmapBit(pmap,2);
 4659        if (prs) {
 4660            prs = !lib_fast::DecodeNull(from);
 4661            if (prs) {
 4662                ok = lib_fast::DecodeUnsigned(from,parent.MultiLegReportingType.value,true);
 4663                if (!ok) {
 4664                    state.error << "emdi12.TradeEntryGrp.MultiLegReportingType: bad Unsigned" << eol;
 4665                }
 4666            }
 4667        } else {
 4668            parent.MultiLegReportingType.value = 1;
 4669            prs = true;
 4670        }
 4671        pmask_qSetBitVal(parent,MultiLegReportingType_Present_GetBit(parent),prs);
 4672    }
 4673    // MultiLegPriceModel type default optional
 4674    if (ok) {
 4675        bool prs = lib_fast::GetPmapBit(pmap,3);
 4676        if (prs) {
 4677            prs = !lib_fast::DecodeNull(from);
 4678            if (prs) {
 4679                ok = lib_fast::DecodeUnsigned(from,parent.MultiLegPriceModel.value,true);
 4680                if (!ok) {
 4681                    state.error << "emdi12.TradeEntryGrp.MultiLegPriceModel: bad Unsigned" << eol;
 4682                }
 4683            }
 4684        } else {
 4685            parent.MultiLegPriceModel.value = 0;
 4686            prs = true;
 4687        }
 4688        pmask_qSetBitVal(parent,MultiLegPriceModel_Present_GetBit(parent),prs);
 4689    }
 4690    // AggressorTime signed none optional
 4691    if (ok) {
 4692        bool prs = !lib_fast::DecodeNull(from);
 4693        if (prs) {
 4694            ok = lib_fast::DecodeSigned(from,parent.AggressorTime,true);
 4695            if (!ok) {
 4696                state.error << "emdi12.TradeEntryGrp.AggressorTime: bad Signed" << eol;
 4697            }
 4698        }
 4699        pmask_qSetBitVal(parent,AggressorTime_Present_GetBit(parent),prs);
 4700    }
 4701    // RequestTime signed none optional
 4702    if (ok) {
 4703        bool prs = !lib_fast::DecodeNull(from);
 4704        if (prs) {
 4705            ok = lib_fast::DecodeSigned(from,parent.RequestTime,true);
 4706            if (!ok) {
 4707                state.error << "emdi12.TradeEntryGrp.RequestTime: bad Signed" << eol;
 4708            }
 4709        }
 4710        pmask_qSetBitVal(parent,RequestTime_Present_GetBit(parent),prs);
 4711    }
 4712    // AggressorSide type none optional
 4713    if (ok) {
 4714        bool prs = !lib_fast::DecodeNull(from);
 4715        if (prs) {
 4716            ok = lib_fast::DecodeUnsigned(from,parent.AggressorSide.value,true);
 4717            if (!ok) {
 4718                state.error << "emdi12.TradeEntryGrp.AggressorSide: bad Unsigned" << eol;
 4719            }
 4720        }
 4721        pmask_qSetBitVal(parent,AggressorSide_Present_GetBit(parent),prs);
 4722    }
 4723    // NumberOfBuyOrders unsigned none optional
 4724    if (ok) {
 4725        bool prs = !lib_fast::DecodeNull(from);
 4726        if (prs) {
 4727            ok = lib_fast::DecodeUnsigned(from,parent.NumberOfBuyOrders,true);
 4728            if (!ok) {
 4729                state.error << "emdi12.TradeEntryGrp.NumberOfBuyOrders: bad Unsigned" << eol;
 4730            }
 4731        }
 4732        pmask_qSetBitVal(parent,NumberOfBuyOrders_Present_GetBit(parent),prs);
 4733    }
 4734    // NumberOfSellOrders unsigned none optional
 4735    if (ok) {
 4736        bool prs = !lib_fast::DecodeNull(from);
 4737        if (prs) {
 4738            ok = lib_fast::DecodeUnsigned(from,parent.NumberOfSellOrders,true);
 4739            if (!ok) {
 4740                state.error << "emdi12.TradeEntryGrp.NumberOfSellOrders: bad Unsigned" << eol;
 4741            }
 4742        }
 4743        pmask_qSetBitVal(parent,NumberOfSellOrders_Present_GetBit(parent),prs);
 4744    }
 4745    // TotalNumOfTrades unsigned none optional
 4746    if (ok) {
 4747        bool prs = !lib_fast::DecodeNull(from);
 4748        if (prs) {
 4749            ok = lib_fast::DecodeUnsigned(from,parent.TotalNumOfTrades,true);
 4750            if (!ok) {
 4751                state.error << "emdi12.TradeEntryGrp.TotalNumOfTrades: bad Unsigned" << eol;
 4752            }
 4753        }
 4754        pmask_qSetBitVal(parent,TotalNumOfTrades_Present_GetBit(parent),prs);
 4755    }
 4756    // RestingCxlQty scaled none optional
 4757    if (ok) {
 4758        bool prs = !lib_fast::DecodeNull(from);
 4759        if (prs) {
 4760            ok = lib_fast::DecodeScaled(from,parent.RestingCxlQty,true);
 4761            if (!ok) {
 4762                state.error << "emdi12.TradeEntryGrp.RestingCxlQty: bad Scaled" << eol;
 4763            }
 4764        }
 4765        pmask_qSetBitVal(parent,RestingCxlQty_Present_GetBit(parent),prs);
 4766    }
 4767    // MDEntryID unsigned delta optional
 4768    if (ok) {
 4769        if (!MDEntryID_AssignedQ(state)) {
 4770            MDEntryID_SetAssigned(state);
 4771            bool prs(true);
 4772            present_qSetBitVal(state,MDEntryID_Present_GetBit(state),prs);
 4773            state.MDEntryID = 0;
 4774        }
 4775        bool prs = !lib_fast::DecodeNull(from);
 4776        if (prs) {
 4777            if (!MDEntryID_PresentQ(state)) {
 4778                state.MDEntryID = 0;
 4779            }
 4780            ok = lib_fast::DecodeDeltaUnsigned(from,state.MDEntryID,parent.MDEntryID,true);
 4781            if (!ok) {
 4782                state.error << "emdi12.TradeEntryGrp.MDEntryID: bad Unsigned delta" << eol;
 4783            }
 4784            state.MDEntryID = parent.MDEntryID;
 4785        }
 4786        pmask_qSetBitVal(parent,MDEntryID_Present_GetBit(parent),prs);
 4787        present_qSetBitVal(state,MDEntryID_Present_GetBit(state),prs);
 4788    }
 4789    // NonDisclosedTradeVolume scaled none optional
 4790    if (ok) {
 4791        bool prs = !lib_fast::DecodeNull(from);
 4792        if (prs) {
 4793            ok = lib_fast::DecodeScaled(from,parent.NonDisclosedTradeVolume,true);
 4794            if (!ok) {
 4795                state.error << "emdi12.TradeEntryGrp.NonDisclosedTradeVolume: bad Scaled" << eol;
 4796            }
 4797        }
 4798        pmask_qSetBitVal(parent,NonDisclosedTradeVolume_Present_GetBit(parent),prs);
 4799    }
 4800    return ok;
 4801}
 4802
 4803// --- emdi12.TradeEntryGrp..FixEncode
 4804void emdi12::TradeEntryGrp_FixEncode(cstring& buf, emdi12::TradeEntryGrp& parent, char soh) {
 4805    if (TrdType_PresentQ(parent)) {
 4806        buf << "828=" << parent.TrdType << soh;
 4807    }
 4808    if (AlgorithmicTradeIndicator_PresentQ(parent)) {
 4809        buf << "2667=" << parent.AlgorithmicTradeIndicator << soh;
 4810    }
 4811    if (TradeCondition_PresentQ(parent)) {
 4812        buf << "277=" << parent.TradeCondition << soh;
 4813    }
 4814    if (MultiLegReportingType_PresentQ(parent)) {
 4815        buf << "442=" << parent.MultiLegReportingType << soh;
 4816    }
 4817    if (MultiLegPriceModel_PresentQ(parent)) {
 4818        buf << "28750=" << parent.MultiLegPriceModel << soh;
 4819    }
 4820    if (AggressorTime_PresentQ(parent)) {
 4821        buf << "2445=" << parent.AggressorTime << soh;
 4822    }
 4823    if (RequestTime_PresentQ(parent)) {
 4824        buf << "5979=" << parent.RequestTime << soh;
 4825    }
 4826    if (AggressorSide_PresentQ(parent)) {
 4827        buf << "2446=" << parent.AggressorSide << soh;
 4828    }
 4829    if (NumberOfBuyOrders_PresentQ(parent)) {
 4830        buf << "2449=" << parent.NumberOfBuyOrders << soh;
 4831    }
 4832    if (NumberOfSellOrders_PresentQ(parent)) {
 4833        buf << "2450=" << parent.NumberOfSellOrders << soh;
 4834    }
 4835    if (TotalNumOfTrades_PresentQ(parent)) {
 4836        buf << "6139=" << parent.TotalNumOfTrades << soh;
 4837    }
 4838    if (RestingCxlQty_PresentQ(parent)) {
 4839        buf << "28869=" << parent.RestingCxlQty << soh;
 4840    }
 4841    if (MDEntryID_PresentQ(parent)) {
 4842        buf << "278=" << parent.MDEntryID << soh;
 4843    }
 4844    if (NonDisclosedTradeVolume_PresentQ(parent)) {
 4845        buf << "28873=" << parent.NonDisclosedTradeVolume << soh;
 4846    }
 4847}
 4848
 4849// --- emdi12.MDIncGrp1.MDOriginType.ReadStrptrMaybe
 4850inline static bool emdi12::MDOriginType_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) {
 4851    bool retval = true;
 4852    retval = emdi12::MDOriginType_ReadStrptrMaybe(parent.MDOriginType, in_str);
 4853    return retval;
 4854}
 4855
 4856// --- emdi12.MDIncGrp1.MDUpdateAction.ReadStrptrMaybe
 4857inline static bool emdi12::MDUpdateAction_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) {
 4858    bool retval = true;
 4859    retval = emdi12::MDUpdateAction_ReadStrptrMaybe(parent.MDUpdateAction, in_str);
 4860    return retval;
 4861}
 4862
 4863// --- emdi12.MDIncGrp1.MDEntryType.ReadStrptrMaybe
 4864inline static bool emdi12::MDEntryType_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) {
 4865    bool retval = true;
 4866    retval = emdi12::MDEntryType_ReadStrptrMaybe(parent.MDEntryType, in_str);
 4867    return retval;
 4868}
 4869
 4870// --- emdi12.MDIncGrp1.SecurityID.ReadStrptrMaybe
 4871inline static bool emdi12::SecurityID_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) {
 4872    bool retval = true;
 4873    retval = i64_ReadStrptrMaybe(parent.SecurityID, in_str);
 4874    return retval;
 4875}
 4876
 4877// --- emdi12.MDIncGrp1.MDEntryPx.ReadStrptrMaybe
 4878inline static bool emdi12::MDEntryPx_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) {
 4879    bool retval = true;
 4880    algo::Decimal MDEntryPx_tmp;
 4881    retval = algo::Decimal_ReadStrptrMaybe(MDEntryPx_tmp, in_str);
 4882    if (retval) {
 4883        MDEntryPx_Set(parent, MDEntryPx_tmp);
 4884    }
 4885    return retval;
 4886}
 4887
 4888// --- emdi12.MDIncGrp1.MDEntrySize.ReadStrptrMaybe
 4889inline static bool emdi12::MDEntrySize_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) {
 4890    bool retval = true;
 4891    algo::Decimal MDEntrySize_tmp;
 4892    retval = algo::Decimal_ReadStrptrMaybe(MDEntrySize_tmp, in_str);
 4893    if (retval) {
 4894        MDEntrySize_Set(parent, MDEntrySize_tmp);
 4895    }
 4896    return retval;
 4897}
 4898
 4899// --- emdi12.MDIncGrp1.NumberOfOrders.ReadStrptrMaybe
 4900inline static bool emdi12::NumberOfOrders_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) {
 4901    bool retval = true;
 4902    u32 NumberOfOrders_tmp;
 4903    retval = u32_ReadStrptrMaybe(NumberOfOrders_tmp, in_str);
 4904    if (retval) {
 4905        NumberOfOrders_Set(parent, NumberOfOrders_tmp);
 4906    }
 4907    return retval;
 4908}
 4909
 4910// --- emdi12.MDIncGrp1.MDPriceLevel.ReadStrptrMaybe
 4911inline static bool emdi12::MDPriceLevel_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) {
 4912    bool retval = true;
 4913    u32 MDPriceLevel_tmp;
 4914    retval = u32_ReadStrptrMaybe(MDPriceLevel_tmp, in_str);
 4915    if (retval) {
 4916        MDPriceLevel_Set(parent, MDPriceLevel_tmp);
 4917    }
 4918    return retval;
 4919}
 4920
 4921// --- emdi12.MDIncGrp1.MDEntryTime.ReadStrptrMaybe
 4922inline static bool emdi12::MDEntryTime_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) {
 4923    bool retval = true;
 4924    i64 MDEntryTime_tmp;
 4925    retval = i64_ReadStrptrMaybe(MDEntryTime_tmp, in_str);
 4926    if (retval) {
 4927        MDEntryTime_Set(parent, MDEntryTime_tmp);
 4928    }
 4929    return retval;
 4930}
 4931
 4932// --- emdi12.MDIncGrp1.PotentialSecurityTradingEvent.ReadStrptrMaybe
 4933inline static bool emdi12::PotentialSecurityTradingEvent_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) {
 4934    bool retval = true;
 4935    emdi12::SecurityTradingEvent PotentialSecurityTradingEvent_tmp;
 4936    retval = emdi12::SecurityTradingEvent_ReadStrptrMaybe(PotentialSecurityTradingEvent_tmp, in_str);
 4937    if (retval) {
 4938        PotentialSecurityTradingEvent_Set(parent, PotentialSecurityTradingEvent_tmp);
 4939    }
 4940    return retval;
 4941}
 4942
 4943// --- emdi12.MDIncGrp1.QuoteCondition.ReadStrptrMaybe
 4944inline static bool emdi12::QuoteCondition_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) {
 4945    bool retval = true;
 4946    emdi12::QuoteCondition QuoteCondition_tmp;
 4947    retval = emdi12::QuoteCondition_ReadStrptrMaybe(QuoteCondition_tmp, in_str);
 4948    if (retval) {
 4949        QuoteCondition_Set(parent, QuoteCondition_tmp);
 4950    }
 4951    return retval;
 4952}
 4953
 4954// --- emdi12.MDIncGrp1.TradeEntryGrp.ReadStrptrMaybe
 4955inline static bool emdi12::TradeEntryGrp_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) {
 4956    bool retval = true;
 4957    emdi12::TradeEntryGrp TradeEntryGrp_tmp;
 4958    retval = emdi12::TradeEntryGrp_ReadStrptrMaybe(TradeEntryGrp_tmp, in_str);
 4959    if (retval) {
 4960        TradeEntryGrp_Set(parent, TradeEntryGrp_tmp);
 4961    }
 4962    return retval;
 4963}
 4964
 4965// --- emdi12.MDIncGrp1.pmask_bitcurs.Next
 4966// proceed to next item
 4967void emdi12::MDIncGrp1_pmask_bitcurs_Next(MDIncGrp1_pmask_bitcurs &curs) {
 4968    ++curs.bit;
 4969    int index = curs.bit / 32;
 4970    int offset = curs.bit % 32;
 4971    for (; index < curs.n_elems; ++index, offset = 0) {
 4972        u64 rest = curs.elems[index] >> offset;
 4973        if (rest) {
 4974            offset += algo::u64_BitScanForward(rest);
 4975            break;
 4976        }
 4977    }
 4978    curs.bit = index * 32 + offset;
 4979}
 4980
 4981// --- emdi12.MDIncGrp1..ReadFieldMaybe
 4982bool emdi12::MDIncGrp1_ReadFieldMaybe(emdi12::MDIncGrp1& parent, algo::strptr field, algo::strptr strval) {
 4983    bool retval = true;
 4984    emdi12::FieldId field_id;
 4985    (void)value_SetStrptrMaybe(field_id,field);
 4986    switch(field_id) {
 4987        case emdi12_FieldId_pmask: {
 4988            retval = false;
 4989            break;
 4990        }
 4991        case emdi12_FieldId_MDOriginType: {
 4992            retval = MDOriginType_ReadStrptrMaybe(parent, strval);
 4993            break;
 4994        }
 4995        case emdi12_FieldId_MDUpdateAction: {
 4996            retval = MDUpdateAction_ReadStrptrMaybe(parent, strval);
 4997            break;
 4998        }
 4999        case emdi12_FieldId_MDEntryType: {
 5000            retval = MDEntryType_ReadStrptrMaybe(parent, strval);
 5001            break;
 5002        }
 5003        case emdi12_FieldId_SecurityID: {
 5004            retval = SecurityID_ReadStrptrMaybe(parent, strval);
 5005            break;
 5006        }
 5007        case emdi12_FieldId_SecurityIDSource: {
 5008            retval = true;
 5009            break;
 5010        }
 5011        case emdi12_FieldId_MDEntryPx: {
 5012            retval = MDEntryPx_ReadStrptrMaybe(parent, strval);
 5013            if (retval) {
 5014                pmask_qSetBit(parent, 0);
 5015            }
 5016            break;
 5017        }
 5018        case emdi12_FieldId_MDEntrySize: {
 5019            retval = MDEntrySize_ReadStrptrMaybe(parent, strval);
 5020            if (retval) {
 5021                pmask_qSetBit(parent, 1);
 5022            }
 5023            break;
 5024        }
 5025        case emdi12_FieldId_NumberOfOrders: {
 5026            retval = NumberOfOrders_ReadStrptrMaybe(parent, strval);
 5027            if (retval) {
 5028                pmask_qSetBit(parent, 4);
 5029            }
 5030            break;
 5031        }
 5032        case emdi12_FieldId_MDPriceLevel: {
 5033            retval = MDPriceLevel_ReadStrptrMaybe(parent, strval);
 5034            if (retval) {
 5035                pmask_qSetBit(parent, 3);
 5036            }
 5037            break;
 5038        }
 5039        case emdi12_FieldId_MDEntryTime: {
 5040            retval = MDEntryTime_ReadStrptrMaybe(parent, strval);
 5041            if (retval) {
 5042                pmask_qSetBit(parent, 2);
 5043            }
 5044            break;
 5045        }
 5046        case emdi12_FieldId_PotentialSecurityTradingEvent: {
 5047            retval = PotentialSecurityTradingEvent_ReadStrptrMaybe(parent, strval);
 5048            if (retval) {
 5049                pmask_qSetBit(parent, 5);
 5050            }
 5051            break;
 5052        }
 5053        case emdi12_FieldId_QuoteCondition: {
 5054            retval = QuoteCondition_ReadStrptrMaybe(parent, strval);
 5055            if (retval) {
 5056                pmask_qSetBit(parent, 6);
 5057            }
 5058            break;
 5059        }
 5060        case emdi12_FieldId_TradeEntryGrp: {
 5061            retval = TradeEntryGrp_ReadStrptrMaybe(parent, strval);
 5062            if (retval) {
 5063                pmask_qSetBit(parent, 7);
 5064            }
 5065            break;
 5066        }
 5067        default: break;
 5068    }
 5069    if (!retval) {
 5070        algo_lib::AppendErrtext("attr",field);
 5071    }
 5072    return retval;
 5073}
 5074
 5075// --- emdi12.MDIncGrp1..ReadStrptrMaybe
 5076// Read fields of emdi12::MDIncGrp1 from an ascii string.
 5077// The format of the string is an ssim Tuple
 5078bool emdi12::MDIncGrp1_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) {
 5079    bool retval = true;
 5080    retval = algo::StripTypeTag(in_str, "emdi12.MDIncGrp1");
 5081    ind_beg(algo::Attr_curs, attr, in_str) {
 5082        retval = retval && MDIncGrp1_ReadFieldMaybe(parent, attr.name, attr.value);
 5083    }ind_end;
 5084    return retval;
 5085}
 5086
 5087// --- emdi12.MDIncGrp1..Init
 5088// Set all fields to initial values.
 5089void emdi12::MDIncGrp1_Init(emdi12::MDIncGrp1& MDIncGrp1) {
 5090    MDIncGrp1.pmask = u32(0);
 5091    MDIncGrp1.MDOriginType = emdi12_MDOriginTypeEnum(0);
 5092    MDIncGrp1.SecurityID = i64(0);
 5093    MDIncGrp1.MDEntryPx = algo::Decimal(algo::Decimal(0,0));
 5094    MDIncGrp1.MDEntrySize = algo::Decimal(algo::Decimal(0,0));
 5095    MDIncGrp1.NumberOfOrders = u32(0);
 5096    MDIncGrp1.MDPriceLevel = u32(0);
 5097    MDIncGrp1.MDEntryTime = i64(0);
 5098}
 5099
 5100// --- emdi12.MDIncGrp1..Print
 5101// print string representation of ROW to string STR
 5102// cfmt:emdi12.MDIncGrp1.String  printfmt:Tuple
 5103void emdi12::MDIncGrp1_Print(emdi12::MDIncGrp1& row, algo::cstring& str) {
 5104    algo::tempstr temp;
 5105    str << "emdi12.MDIncGrp1";
 5106
 5107    emdi12::MDOriginType_Print(row.MDOriginType, temp);
 5108    PrintAttrSpaceReset(str,"MDOriginType", temp);
 5109
 5110    emdi12::MDUpdateAction_Print(row.MDUpdateAction, temp);
 5111    PrintAttrSpaceReset(str,"MDUpdateAction", temp);
 5112
 5113    emdi12::MDEntryType_Print(row.MDEntryType, temp);
 5114    PrintAttrSpaceReset(str,"MDEntryType", temp);
 5115
 5116    i64_Print(row.SecurityID, temp);
 5117    PrintAttrSpaceReset(str,"SecurityID", temp);
 5118
 5119    algo::strptr_Print(SecurityIDSource_Get(row), temp);
 5120    PrintAttrSpaceReset(str,"SecurityIDSource", temp);
 5121
 5122    if (MDEntryPx_PresentQ(row)) {
 5123        algo::Decimal_Print(row.MDEntryPx, temp);
 5124        PrintAttrSpaceReset(str,"MDEntryPx", temp);
 5125    }
 5126
 5127    if (MDEntrySize_PresentQ(row)) {
 5128        algo::Decimal_Print(row.MDEntrySize, temp);
 5129        PrintAttrSpaceReset(str,"MDEntrySize", temp);
 5130    }
 5131
 5132    if (NumberOfOrders_PresentQ(row)) {
 5133        u32_Print(row.NumberOfOrders, temp);
 5134        PrintAttrSpaceReset(str,"NumberOfOrders", temp);
 5135    }
 5136
 5137    if (MDPriceLevel_PresentQ(row)) {
 5138        u32_Print(row.MDPriceLevel, temp);
 5139        PrintAttrSpaceReset(str,"MDPriceLevel", temp);
 5140    }
 5141
 5142    if (MDEntryTime_PresentQ(row)) {
 5143        i64_Print(row.MDEntryTime, temp);
 5144        PrintAttrSpaceReset(str,"MDEntryTime", temp);
 5145    }
 5146
 5147    if (PotentialSecurityTradingEvent_PresentQ(row)) {
 5148        emdi12::SecurityTradingEvent_Print(row.PotentialSecurityTradingEvent, temp);
 5149        PrintAttrSpaceReset(str,"PotentialSecurityTradingEvent", temp);
 5150    }
 5151
 5152    if (QuoteCondition_PresentQ(row)) {
 5153        emdi12::QuoteCondition_Print(row.QuoteCondition, temp);
 5154        PrintAttrSpaceReset(str,"QuoteCondition", temp);
 5155    }
 5156
 5157    if (TradeEntryGrp_PresentQ(row)) {
 5158        emdi12::TradeEntryGrp_Print(row.TradeEntryGrp, temp);
 5159        PrintAttrSpaceReset(str,"TradeEntryGrp", temp);
 5160    }
 5161}
 5162
 5163// --- emdi12.MDIncGrp1..FastEncode
 5164void emdi12::MDIncGrp1_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::MDIncGrp1& parent) {
 5165    int index = ary_N(buf);
 5166    u64 pmap(0);
 5167    // MDOriginType type default mandatory
 5168    if (parent.MDOriginType.value != 0) {
 5169        lib_fast::EncodeUnsigned(buf,parent.MDOriginType.value,false);
 5170        lib_fast::SetPmapBit(pmap,0);
 5171    }
 5172    // MDUpdateAction type copy mandatory
 5173    if (!MDUpdateAction_AssignedQ(state) || parent.MDUpdateAction.value != state.MDUpdateAction.value) {
 5174        lib_fast::EncodeUnsigned(buf,parent.MDUpdateAction.value,false);
 5175        lib_fast::SetPmapBit(pmap,1);
 5176    }
 5177    state.MDUpdateAction.value = parent.MDUpdateAction.value;
 5178    MDUpdateAction_SetAssigned(state);
 5179    // MDEntryType type copy mandatory
 5180    if (!MDEntryType_AssignedQ(state) || parent.MDEntryType.value != state.MDEntryType.value) {
 5181        lib_fast::EncodeUnsigned(buf,parent.MDEntryType.value,false);
 5182        lib_fast::SetPmapBit(pmap,2);
 5183    }
 5184    state.MDEntryType.value = parent.MDEntryType.value;
 5185    MDEntryType_SetAssigned(state);
 5186    // SecurityID signed copy mandatory
 5187    if (!SecurityID_AssignedQ(state) || parent.SecurityID != state.SecurityID) {
 5188        lib_fast::EncodeSigned(buf,parent.SecurityID,false);
 5189        lib_fast::SetPmapBit(pmap,3);
 5190    }
 5191    state.SecurityID = parent.SecurityID;
 5192    SecurityID_SetAssigned(state);
 5193    // SecurityIDSource string constant mandatory
 5194    // MDEntryPx scaled delta optional
 5195    if (!MDEntryPx_AssignedQ(state)) {
 5196        MDEntryPx_SetAssigned(state);
 5197        present_qSetBitVal(state,MDEntryPx_Present_GetBit(state),MDEntryPx_PresentQ(parent));
 5198        state.MDEntryPx = algo::Decimal(0,0);
 5199    }
 5200    if (MDEntryPx_PresentQ(parent)) {
 5201        if (!MDEntryPx_PresentQ(state)) {
 5202            state.MDEntryPx = algo::Decimal(0,0);
 5203        }
 5204        lib_fast::EncodeDeltaScaled(buf,state.MDEntryPx,parent.MDEntryPx,true);
 5205    } else {
 5206        lib_fast::EncodeNull(buf);
 5207    }
 5208    state.MDEntryPx = parent.MDEntryPx;
 5209    present_qSetBitVal(state,MDEntryPx_Present_GetBit(state),MDEntryPx_PresentQ(parent));
 5210    // MDEntrySize scaled delta optional
 5211    if (!MDEntrySize_AssignedQ(state)) {
 5212        MDEntrySize_SetAssigned(state);
 5213        present_qSetBitVal(state,MDEntrySize_Present_GetBit(state),MDEntrySize_PresentQ(parent));
 5214        state.MDEntrySize = algo::Decimal(0,0);
 5215    }
 5216    if (MDEntrySize_PresentQ(parent)) {
 5217        if (!MDEntrySize_PresentQ(state)) {
 5218            state.MDEntrySize = algo::Decimal(0,0);
 5219        }
 5220        lib_fast::EncodeDeltaScaled(buf,state.MDEntrySize,parent.MDEntrySize,true);
 5221    } else {
 5222        lib_fast::EncodeNull(buf);
 5223    }
 5224    state.MDEntrySize = parent.MDEntrySize;
 5225    present_qSetBitVal(state,MDEntrySize_Present_GetBit(state),MDEntrySize_PresentQ(parent));
 5226    // NumberOfOrders unsigned delta optional
 5227    if (!NumberOfOrders_AssignedQ(state)) {
 5228        NumberOfOrders_SetAssigned(state);
 5229        present_qSetBitVal(state,NumberOfOrders_Present_GetBit(state),NumberOfOrders_PresentQ(parent));
 5230        state.NumberOfOrders = 0;
 5231    }
 5232    if (NumberOfOrders_PresentQ(parent)) {
 5233        if (!NumberOfOrders_PresentQ(state)) {
 5234            state.NumberOfOrders = 0;
 5235        }
 5236        lib_fast::EncodeDeltaUnsigned(buf,state.NumberOfOrders,parent.NumberOfOrders,true);
 5237    } else {
 5238        lib_fast::EncodeNull(buf);
 5239    }
 5240    state.NumberOfOrders = parent.NumberOfOrders;
 5241    present_qSetBitVal(state,NumberOfOrders_Present_GetBit(state),NumberOfOrders_PresentQ(parent));
 5242    // MDPriceLevel unsigned none optional
 5243    if (MDPriceLevel_PresentQ(parent)) {
 5244        lib_fast::EncodeUnsigned(buf,parent.MDPriceLevel,true);
 5245    } else {
 5246        lib_fast::EncodeNull(buf);
 5247    }
 5248    // MDEntryTime signed copy optional
 5249    if (MDEntryTime_PresentQ(parent)) {
 5250        if (!MDEntryTime_AssignedQ(state) || !MDEntryTime_PresentQ(state) ||  parent.MDEntryTime != state.MDEntryTime ) {
 5251            lib_fast::EncodeSigned(buf,parent.MDEntryTime,true);
 5252            lib_fast::SetPmapBit(pmap,4);
 5253        }
 5254    } else {
 5255        if (MDEntryTime_AssignedQ(state)) {
 5256            lib_fast::EncodeNull(buf);
 5257            lib_fast::SetPmapBit(pmap,4);
 5258        }
 5259    }
 5260    state.MDEntryTime = parent.MDEntryTime;
 5261    present_qSetBitVal(state,MDEntryTime_Present_GetBit(state),MDEntryTime_PresentQ(parent));
 5262    MDEntryTime_SetAssigned(state);
 5263    // PotentialSecurityTradingEvent type none optional
 5264    if (PotentialSecurityTradingEvent_PresentQ(parent)) {
 5265        lib_fast::EncodeUnsigned(buf,parent.PotentialSecurityTradingEvent.value,true);
 5266    } else {
 5267        lib_fast::EncodeNull(buf);
 5268    }
 5269    // QuoteCondition type none optional
 5270    if (QuoteCondition_PresentQ(parent)) {
 5271        lib_fast::EncodeUnsigned(buf,parent.QuoteCondition.value,true);
 5272    } else {
 5273        lib_fast::EncodeNull(buf);
 5274    }
 5275    // TradeEntryGrp group none optional
 5276    if (TradeEntryGrp_PresentQ(parent)) {
 5277        TradeEntryGrp_FastEncode(buf,state,parent.TradeEntryGrp);
 5278        lib_fast::SetPmapBit(pmap,5);
 5279    }
 5280    lib_fast::InsertPmap(buf,index,pmap);
 5281}
 5282
 5283// --- emdi12.MDIncGrp1..FastDecode
 5284bool emdi12::MDIncGrp1_FastDecode(algo::memptr& from, FastState& state, emdi12::MDIncGrp1& parent) {
 5285    bool ok = true;
 5286    u64 pmap;
 5287    ok = lib_fast::DecodePmap(from,pmap);
 5288    if (!ok) {
 5289        state.error << "emdi12.MDIncGrp1: bad pmap" << eol;
 5290    }
 5291    // MDOriginType type default mandatory
 5292    if (ok) {
 5293        bool prs = lib_fast::GetPmapBit(pmap,0);
 5294        if (prs) {
 5295            ok = lib_fast::DecodeUnsigned(from,parent.MDOriginType.value,false);
 5296            if (!ok) {
 5297                state.error << "emdi12.MDIncGrp1.MDOriginType: bad Unsigned" << eol;
 5298            }
 5299        } else {
 5300            parent.MDOriginType.value = 0;
 5301        }
 5302    }
 5303    // MDUpdateAction type copy mandatory
 5304    if (ok) {
 5305        bool prs = lib_fast::GetPmapBit(pmap,1);
 5306        if (prs) {
 5307            ok = lib_fast::DecodeUnsigned(from,parent.MDUpdateAction.value,false);
 5308            if (!ok) {
 5309                state.error << "emdi12.MDIncGrp1.MDUpdateAction: bad Unsigned" << eol;
 5310            }
 5311        } else if (MDUpdateAction_AssignedQ(state)) {
 5312            parent.MDUpdateAction.value = state.MDUpdateAction.value;
 5313        } else {
 5314            ok = false;
 5315            state.error << "emdi12.MDIncGrp1.MDUpdateAction: copy operator: previous value unassigned" << eol;
 5316        }
 5317        MDUpdateAction_SetAssigned(state);
 5318        state.MDUpdateAction.value = parent.MDUpdateAction.value;
 5319    }
 5320    // MDEntryType type copy mandatory
 5321    if (ok) {
 5322        bool prs = lib_fast::GetPmapBit(pmap,2);
 5323        if (prs) {
 5324            ok = lib_fast::DecodeUnsigned(from,parent.MDEntryType.value,false);
 5325            if (!ok) {
 5326                state.error << "emdi12.MDIncGrp1.MDEntryType: bad Unsigned" << eol;
 5327            }
 5328        } else if (MDEntryType_AssignedQ(state)) {
 5329            parent.MDEntryType.value = state.MDEntryType.value;
 5330        } else {
 5331            ok = false;
 5332            state.error << "emdi12.MDIncGrp1.MDEntryType: copy operator: previous value unassigned" << eol;
 5333        }
 5334        MDEntryType_SetAssigned(state);
 5335        state.MDEntryType.value = parent.MDEntryType.value;
 5336    }
 5337    // SecurityID signed copy mandatory
 5338    if (ok) {
 5339        bool prs = lib_fast::GetPmapBit(pmap,3);
 5340        if (prs) {
 5341            ok = lib_fast::DecodeSigned(from,parent.SecurityID,false);
 5342            if (!ok) {
 5343                state.error << "emdi12.MDIncGrp1.SecurityID: bad Signed" << eol;
 5344            }
 5345        } else if (SecurityID_AssignedQ(state)) {
 5346            parent.SecurityID = state.SecurityID;
 5347        } else {
 5348            ok = false;
 5349            state.error << "emdi12.MDIncGrp1.SecurityID: copy operator: previous value unassigned" << eol;
 5350        }
 5351        SecurityID_SetAssigned(state);
 5352        state.SecurityID = parent.SecurityID;
 5353    }
 5354    // SecurityIDSource string constant mandatory
 5355    if (ok) {
 5356    }
 5357    // MDEntryPx scaled delta optional
 5358    if (ok) {
 5359        if (!MDEntryPx_AssignedQ(state)) {
 5360            MDEntryPx_SetAssigned(state);
 5361            bool prs(true);
 5362            present_qSetBitVal(state,MDEntryPx_Present_GetBit(state),prs);
 5363            state.MDEntryPx = algo::Decimal(0,0);
 5364        }
 5365        bool prs = !lib_fast::DecodeNull(from);
 5366        if (prs) {
 5367            if (!MDEntryPx_PresentQ(state)) {
 5368                state.MDEntryPx = algo::Decimal(0,0);
 5369            }
 5370            ok = lib_fast::DecodeDeltaScaled(from,state.MDEntryPx,parent.MDEntryPx,true);
 5371            if (!ok) {
 5372                state.error << "emdi12.MDIncGrp1.MDEntryPx: bad Scaled delta" << eol;
 5373            }
 5374            state.MDEntryPx = parent.MDEntryPx;
 5375        }
 5376        pmask_qSetBitVal(parent,MDEntryPx_Present_GetBit(parent),prs);
 5377        present_qSetBitVal(state,MDEntryPx_Present_GetBit(state),prs);
 5378    }
 5379    // MDEntrySize scaled delta optional
 5380    if (ok) {
 5381        if (!MDEntrySize_AssignedQ(state)) {
 5382            MDEntrySize_SetAssigned(state);
 5383            bool prs(true);
 5384            present_qSetBitVal(state,MDEntrySize_Present_GetBit(state),prs);
 5385            state.MDEntrySize = algo::Decimal(0,0);
 5386        }
 5387        bool prs = !lib_fast::DecodeNull(from);
 5388        if (prs) {
 5389            if (!MDEntrySize_PresentQ(state)) {
 5390                state.MDEntrySize = algo::Decimal(0,0);
 5391            }
 5392            ok = lib_fast::DecodeDeltaScaled(from,state.MDEntrySize,parent.MDEntrySize,true);
 5393            if (!ok) {
 5394                state.error << "emdi12.MDIncGrp1.MDEntrySize: bad Scaled delta" << eol;
 5395            }
 5396            state.MDEntrySize = parent.MDEntrySize;
 5397        }
 5398        pmask_qSetBitVal(parent,MDEntrySize_Present_GetBit(parent),prs);
 5399        present_qSetBitVal(state,MDEntrySize_Present_GetBit(state),prs);
 5400    }
 5401    // NumberOfOrders unsigned delta optional
 5402    if (ok) {
 5403        if (!NumberOfOrders_AssignedQ(state)) {
 5404            NumberOfOrders_SetAssigned(state);
 5405            bool prs(true);
 5406            present_qSetBitVal(state,NumberOfOrders_Present_GetBit(state),prs);
 5407            state.NumberOfOrders = 0;
 5408        }
 5409        bool prs = !lib_fast::DecodeNull(from);
 5410        if (prs) {
 5411            if (!NumberOfOrders_PresentQ(state)) {
 5412                state.NumberOfOrders = 0;
 5413            }
 5414            ok = lib_fast::DecodeDeltaUnsigned(from,state.NumberOfOrders,parent.NumberOfOrders,true);
 5415            if (!ok) {
 5416                state.error << "emdi12.MDIncGrp1.NumberOfOrders: bad Unsigned delta" << eol;
 5417            }
 5418            state.NumberOfOrders = parent.NumberOfOrders;
 5419        }
 5420        pmask_qSetBitVal(parent,NumberOfOrders_Present_GetBit(parent),prs);
 5421        present_qSetBitVal(state,NumberOfOrders_Present_GetBit(state),prs);
 5422    }
 5423    // MDPriceLevel unsigned none optional
 5424    if (ok) {
 5425        bool prs = !lib_fast::DecodeNull(from);
 5426        if (prs) {
 5427            ok = lib_fast::DecodeUnsigned(from,parent.MDPriceLevel,true);
 5428            if (!ok) {
 5429                state.error << "emdi12.MDIncGrp1.MDPriceLevel: bad Unsigned" << eol;
 5430            }
 5431        }
 5432        pmask_qSetBitVal(parent,MDPriceLevel_Present_GetBit(parent),prs);
 5433    }
 5434    // MDEntryTime signed copy optional
 5435    if (ok) {
 5436        bool prs = lib_fast::GetPmapBit(pmap,4);
 5437        if (prs) {
 5438            prs = !lib_fast::DecodeNull(from);
 5439            if (prs) {
 5440                ok = lib_fast::DecodeSigned(from,parent.MDEntryTime,true);
 5441                if (!ok) {
 5442                    state.error << "emdi12.MDIncGrp1.MDEntryTime: bad Signed" << eol;
 5443                }
 5444            }
 5445        } else if (MDEntryTime_AssignedQ(state)) {
 5446            parent.MDEntryTime = state.MDEntryTime;
 5447            prs = MDEntryTime_PresentQ(state);
 5448        } else {
 5449            prs = false;
 5450        }
 5451        pmask_qSetBitVal(parent,MDEntryTime_Present_GetBit(parent),prs);
 5452        MDEntryTime_SetAssigned(state);
 5453        present_qSetBitVal(state,MDEntryTime_Present_GetBit(state),prs);
 5454        state.MDEntryTime = parent.MDEntryTime;
 5455    }
 5456    // PotentialSecurityTradingEvent type none optional
 5457    if (ok) {
 5458        bool prs = !lib_fast::DecodeNull(from);
 5459        if (prs) {
 5460            ok = lib_fast::DecodeUnsigned(from,parent.PotentialSecurityTradingEvent.value,true);
 5461            if (!ok) {
 5462                state.error << "emdi12.MDIncGrp1.PotentialSecurityTradingEvent: bad Unsigned" << eol;
 5463            }
 5464        }
 5465        pmask_qSetBitVal(parent,PotentialSecurityTradingEvent_Present_GetBit(parent),prs);
 5466    }
 5467    // QuoteCondition type none optional
 5468    if (ok) {
 5469        bool prs = !lib_fast::DecodeNull(from);
 5470        if (prs) {
 5471            ok = lib_fast::DecodeUnsigned(from,parent.QuoteCondition.value,true);
 5472            if (!ok) {
 5473                state.error << "emdi12.MDIncGrp1.QuoteCondition: bad Unsigned" << eol;
 5474            }
 5475        }
 5476        pmask_qSetBitVal(parent,QuoteCondition_Present_GetBit(parent),prs);
 5477    }
 5478    // TradeEntryGrp group none optional
 5479    if (ok) {
 5480        bool prs = lib_fast::GetPmapBit(pmap,5);
 5481        pmask_qSetBitVal(parent,TradeEntryGrp_Present_GetBit(parent),prs);
 5482        if (prs) {
 5483            ok = TradeEntryGrp_FastDecode(from,state,parent.TradeEntryGrp);
 5484        }
 5485    }
 5486    return ok;
 5487}
 5488
 5489// --- emdi12.MDIncGrp1..FixEncode
 5490void emdi12::MDIncGrp1_FixEncode(cstring& buf, emdi12::MDIncGrp1& parent, char soh) {
 5491    buf << "1024=" << parent.MDOriginType << soh;
 5492    buf << "279=" << parent.MDUpdateAction << soh;
 5493    buf << "269=" << parent.MDEntryType << soh;
 5494    buf << "48=" << parent.SecurityID << soh;
 5495    buf << "22=" << SecurityIDSource_Get(parent) << soh;
 5496    if (MDEntryPx_PresentQ(parent)) {
 5497        buf << "270=" << parent.MDEntryPx << soh;
 5498    }
 5499    if (MDEntrySize_PresentQ(parent)) {
 5500        buf << "271=" << parent.MDEntrySize << soh;
 5501    }
 5502    if (NumberOfOrders_PresentQ(parent)) {
 5503        buf << "346=" << parent.NumberOfOrders << soh;
 5504    }
 5505    if (MDPriceLevel_PresentQ(parent)) {
 5506        buf << "1023=" << parent.MDPriceLevel << soh;
 5507    }
 5508    if (MDEntryTime_PresentQ(parent)) {
 5509        buf << "273=" << parent.MDEntryTime << soh;
 5510    }
 5511    if (PotentialSecurityTradingEvent_PresentQ(parent)) {
 5512        buf << "28872=" << parent.PotentialSecurityTradingEvent << soh;
 5513    }
 5514    if (QuoteCondition_PresentQ(parent)) {
 5515        buf << "276=" << parent.QuoteCondition << soh;
 5516    }
 5517    if (TradeEntryGrp_PresentQ(parent)) {
 5518        TradeEntryGrp_FixEncode(buf,parent.TradeEntryGrp,soh);
 5519    }
 5520}
 5521
 5522// --- emdi12.DepthIncremental.base.CopyOut
 5523// Copy fields out of row
 5524void emdi12::parent_CopyOut(emdi12::DepthIncremental &row, emdi12::TemplateHeader &out) {
 5525    // length: field value is computed
 5526    // id: field value is computed
 5527    (void)row;//only to avoid -Wunused-parameter
 5528    (void)out;//only to avoid -Wunused-parameter
 5529}
 5530
 5531// --- emdi12.DepthIncremental.MDIncGrp1.Getary
 5532// Access var-length portion as an aryptr. Length is determined from one of the fields.
 5533algo::aryptr<emdi12::MDIncGrp1> emdi12::MDIncGrp1_Getary(emdi12::DepthIncremental& parent) {
 5534    return algo::aryptr<emdi12::MDIncGrp1>(MDIncGrp1_Addr(parent), MDIncGrp1_N(parent));
 5535}
 5536
 5537// --- emdi12.DepthIncremental.MDIncGrp1.Addr
 5538emdi12::MDIncGrp1* emdi12::MDIncGrp1_Addr(emdi12::DepthIncremental& parent) {
 5539    return (emdi12::MDIncGrp1*)((u8*)&parent + sizeof(emdi12::DepthIncremental)); // address of varlen portion
 5540}
 5541
 5542// --- emdi12.DepthIncremental.MDIncGrp1.ReadStrptrMaybe
 5543// Convert string to field. Return success value
 5544bool emdi12::MDIncGrp1_ReadStrptrMaybe(emdi12::DepthIncremental& parent, algo::strptr in_str) {
 5545    bool retval = true;
 5546    if (algo_lib::_db.varlenbuf) {
 5547        emdi12::MDIncGrp1 *MDIncGrp1_tmp = new(ary_AllocN(*algo_lib::_db.varlenbuf, sizeof(emdi12::MDIncGrp1)).elems) emdi12::MDIncGrp1;
 5548        retval = emdi12::MDIncGrp1_ReadStrptrMaybe(*MDIncGrp1_tmp, in_str);
 5549    }
 5550    (void)parent;//only to avoid -Wunused-parameter
 5551    return retval;
 5552}
 5553
 5554// --- emdi12.DepthIncremental..ReadFieldMaybe
 5555bool emdi12::DepthIncremental_ReadFieldMaybe(emdi12::DepthIncremental& parent, algo::strptr field, algo::strptr strval) {
 5556    bool retval = true;
 5557    emdi12::FieldId field_id;
 5558    (void)value_SetStrptrMaybe(field_id,algo::Pathcomp(field, ".LL"));
 5559    switch(field_id) {
 5560        case emdi12_FieldId_base: {
 5561            retval = false;
 5562            break;
 5563        }
 5564        case emdi12_FieldId_length: {
 5565            retval = false;
 5566            break;
 5567        }
 5568        case emdi12_FieldId_id: {
 5569            retval = false;
 5570            break;
 5571        }
 5572        case emdi12_FieldId_MsgType: {
 5573            retval = true;
 5574            break;
 5575        }
 5576        case emdi12_FieldId_MsgSeqNum: {
 5577            retval = u32_ReadStrptrMaybe(parent.MsgSeqNum, strval);
 5578            break;
 5579        }
 5580        case emdi12_FieldId_SenderCompID: {
 5581            retval = u32_ReadStrptrMaybe(parent.SenderCompID, strval);
 5582            break;
 5583        }
 5584        case emdi12_FieldId_MarketSegmentID: {
 5585            retval = u32_ReadStrptrMaybe(parent.MarketSegmentID, strval);
 5586            break;
 5587        }
 5588        case emdi12_FieldId_MDIncGrp1: {
 5589            retval = MDIncGrp1_ReadStrptrMaybe(parent, strval);
 5590            break;
 5591        }
 5592        default: break;
 5593    }
 5594    if (!retval) {
 5595        algo_lib::AppendErrtext("attr",field);
 5596    }
 5597    return retval;
 5598}
 5599
 5600// --- emdi12.DepthIncremental..ReadStrptrMaybe
 5601// Any varlen fields are returned in algo_lib::_db.varlenbuf if set
 5602// Read fields of emdi12::DepthIncremental from an ascii string.
 5603// The format of the string is an ssim Tuple
 5604bool emdi12::DepthIncremental_ReadStrptrMaybe(emdi12::DepthIncremental &parent, algo::strptr in_str) {
 5605    bool retval = true;
 5606    retval = algo::StripTypeTag(in_str, "emdi12.DepthIncremental");
 5607    ind_beg(algo::Attr_curs, attr, in_str) {
 5608        retval = retval && DepthIncremental_ReadFieldMaybe(parent, attr.name, attr.value);
 5609    }ind_end;
 5610    return retval;
 5611}
 5612
 5613// --- emdi12.DepthIncremental..Print
 5614// print string representation of ROW to string STR
 5615// cfmt:emdi12.DepthIncremental.String  printfmt:Tuple
 5616void emdi12::DepthIncremental_Print(emdi12::DepthIncremental& row, algo::cstring& str) {
 5617    algo::tempstr temp;
 5618    str << "emdi12.DepthIncremental";
 5619
 5620    algo::strptr_Print(MsgType_Get(row), temp);
 5621    PrintAttrSpaceReset(str,"MsgType", temp);
 5622
 5623    u32_Print(row.MsgSeqNum, temp);
 5624    PrintAttrSpaceReset(str,"MsgSeqNum", temp);
 5625
 5626    u32_Print(row.SenderCompID, temp);
 5627    PrintAttrSpaceReset(str,"SenderCompID", temp);
 5628
 5629    u32_Print(row.MarketSegmentID, temp);
 5630    PrintAttrSpaceReset(str,"MarketSegmentID", temp);
 5631
 5632    ind_beg(DepthIncremental_MDIncGrp1_curs,MDIncGrp1,row) {
 5633        emdi12::MDIncGrp1_Print(MDIncGrp1, temp);
 5634        tempstr name;
 5635        name << "MDIncGrp1.";
 5636        name << ind_curs(MDIncGrp1).index;
 5637        PrintAttrSpaceReset(str, name, temp);
 5638    }ind_end;
 5639}
 5640
 5641// --- emdi12.DepthIncremental..FastEncode
 5642void emdi12::DepthIncremental_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::DepthIncremental& parent) {
 5643    int index = ary_N(buf);
 5644    u64 pmap(0);
 5645    if (!tid_AssignedQ(state) || parent.id != state.tid) {
 5646        lib_fast::EncodeUnsigned(buf,parent.id,false);
 5647        lib_fast::SetPmapBit(pmap,0);
 5648    }
 5649    tid_SetAssigned(state);
 5650    state.tid = parent.id;
 5651    // MsgType string constant mandatory
 5652    // MsgSeqNum unsigned increment mandatory
 5653    if (MsgSeqNum_AssignedQ(state)) {
 5654        if (parent.MsgSeqNum != state.MsgSeqNum + 1) {
 5655            lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
 5656            lib_fast::SetPmapBit(pmap,1);
 5657        }
 5658    } else {
 5659        lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
 5660        lib_fast::SetPmapBit(pmap,1);
 5661    }
 5662    state.MsgSeqNum = parent.MsgSeqNum;
 5663    MsgSeqNum_SetAssigned(state);
 5664    // SenderCompID unsigned copy mandatory
 5665    if (!SenderCompID_AssignedQ(state) || parent.SenderCompID != state.SenderCompID) {
 5666        lib_fast::EncodeUnsigned(buf,parent.SenderCompID,false);
 5667        lib_fast::SetPmapBit(pmap,2);
 5668    }
 5669    state.SenderCompID = parent.SenderCompID;
 5670    SenderCompID_SetAssigned(state);
 5671    // MarketSegmentID unsigned copy mandatory
 5672    if (!MarketSegmentID_AssignedQ(state) || parent.MarketSegmentID != state.MarketSegmentID) {
 5673        lib_fast::EncodeUnsigned(buf,parent.MarketSegmentID,false);
 5674        lib_fast::SetPmapBit(pmap,3);
 5675    }
 5676    state.MarketSegmentID = parent.MarketSegmentID;
 5677    MarketSegmentID_SetAssigned(state);
 5678    // MDIncGrp1 sequence none mandatory
 5679    {
 5680        u32 length = MDIncGrp1_N(parent);
 5681        lib_fast::EncodeUnsigned(buf,length,false);
 5682        ind_beg(DepthIncremental_MDIncGrp1_curs,elem,parent) {
 5683            MDIncGrp1_FastEncode(buf,state,elem);
 5684        }ind_end;
 5685    }
 5686    lib_fast::InsertPmap(buf,index,pmap);
 5687}
 5688
 5689// --- emdi12.DepthIncremental..FastDecode
 5690bool emdi12::DepthIncremental_FastDecode(algo::memptr& from, u64 pmap, FastState& state, emdi12::DepthIncremental& parent) {
 5691    bool ok = true;
 5692    // MsgType string constant mandatory
 5693    if (ok) {
 5694    }
 5695    // MsgSeqNum unsigned increment mandatory
 5696    if (ok) {
 5697        bool prs = lib_fast::GetPmapBit(pmap,1);
 5698        if (prs) {
 5699            ok = lib_fast::DecodeUnsigned(from,parent.MsgSeqNum,false);
 5700            if (!ok) {
 5701                state.error << "emdi12.DepthIncremental.MsgSeqNum: bad Unsigned" << eol;
 5702            }
 5703        } else if (MsgSeqNum_AssignedQ(state)) {
 5704            parent.MsgSeqNum = state.MsgSeqNum + 1;
 5705        } else {
 5706            ok = false;
 5707            state.error << "emdi12.DepthIncremental.MsgSeqNum: increment operator: previous value unassigned" << eol;
 5708        }
 5709        MsgSeqNum_SetAssigned(state);
 5710        state.MsgSeqNum = parent.MsgSeqNum;
 5711    }
 5712    // SenderCompID unsigned copy mandatory
 5713    if (ok) {
 5714        bool prs = lib_fast::GetPmapBit(pmap,2);
 5715        if (prs) {
 5716            ok = lib_fast::DecodeUnsigned(from,parent.SenderCompID,false);
 5717            if (!ok) {
 5718                state.error << "emdi12.DepthIncremental.SenderCompID: bad Unsigned" << eol;
 5719            }
 5720        } else if (SenderCompID_AssignedQ(state)) {
 5721            parent.SenderCompID = state.SenderCompID;
 5722        } else {
 5723            ok = false;
 5724            state.error << "emdi12.DepthIncremental.SenderCompID: copy operator: previous value unassigned" << eol;
 5725        }
 5726        SenderCompID_SetAssigned(state);
 5727        state.SenderCompID = parent.SenderCompID;
 5728    }
 5729    // MarketSegmentID unsigned copy mandatory
 5730    if (ok) {
 5731        bool prs = lib_fast::GetPmapBit(pmap,3);
 5732        if (prs) {
 5733            ok = lib_fast::DecodeUnsigned(from,parent.MarketSegmentID,false);
 5734            if (!ok) {
 5735                state.error << "emdi12.DepthIncremental.MarketSegmentID: bad Unsigned" << eol;
 5736            }
 5737        } else if (MarketSegmentID_AssignedQ(state)) {
 5738            parent.MarketSegmentID = state.MarketSegmentID;
 5739        } else {
 5740            ok = false;
 5741            state.error << "emdi12.DepthIncremental.MarketSegmentID: copy operator: previous value unassigned" << eol;
 5742        }
 5743        MarketSegmentID_SetAssigned(state);
 5744        state.MarketSegmentID = parent.MarketSegmentID;
 5745    }
 5746    // MDIncGrp1 sequence none mandatory
 5747    if (ok) {
 5748        u32 length(0);
 5749        ok = lib_fast::DecodeUnsigned(from,length,false);
 5750        if (!ok) {
 5751            state.error << "emdi12.DepthIncremental.MDIncGrp1: bad Unsigned" << eol;
 5752        }
 5753        if (!ok) {
 5754            state.error << "emdi12.DepthIncremental.MDIncGrp1: bad length" << eol;
 5755        }
 5756        for (unsigned i=0; ok && i<length; ++i) {
 5757            MDIncGrp1 &seq = *new(ary_AllocN(lib_fast::_db.varlen,sizeof seq).elems) MDIncGrp1;
 5758            ok = MDIncGrp1_FastDecode(from,state,seq);
 5759            if (!ok) {
 5760                state.error << "emdi12.DepthIncremental.MDIncGrp1: element #"<< i+1 << eol;
 5761            }
 5762        }
 5763    }
 5764    return ok;
 5765}
 5766
 5767// --- emdi12.DepthIncremental..FixEncode
 5768void emdi12::DepthIncremental_FixEncode(cstring& buf, emdi12::DepthIncremental& parent, char soh) {
 5769    buf << "35=" << MsgType_Get(parent) << soh;
 5770    buf << "34=" << parent.MsgSeqNum << soh;
 5771    buf << "49=" << parent.SenderCompID << soh;
 5772    buf << "1300=" << parent.MarketSegmentID << soh;
 5773    {
 5774        u32 length = MDIncGrp1_N(parent);
 5775        if (length) {
 5776            buf << "268=" << length << soh;
 5777        }
 5778    }
 5779    ind_beg(DepthIncremental_MDIncGrp1_curs,elem,parent) {
 5780        MDIncGrp1_FixEncode(buf,elem,soh);
 5781    }ind_end;
 5782}
 5783
 5784// --- emdi12.RefreshIndicator.value.ToCstr
 5785// Convert numeric value of field to one of predefined string constants.
 5786// If string is found, return a static C string. Otherwise, return NULL.
 5787const char* emdi12::value_ToCstr(const emdi12::RefreshIndicator& parent) {
 5788    const char *ret = NULL;
 5789    switch(value_GetEnum(parent)) {
 5790        case emdi12_RefreshIndicator_Y     : ret = "Y";  break;
 5791        case emdi12_RefreshIndicator_N     : ret = "N";  break;
 5792    }
 5793    return ret;
 5794}
 5795
 5796// --- emdi12.RefreshIndicator.value.Print
 5797// Convert value to a string. First, attempt conversion to a known string.
 5798// If no string matches, print value as a numeric value.
 5799void emdi12::value_Print(const emdi12::RefreshIndicator& parent, algo::cstring &lhs) {
 5800    const char *strval = value_ToCstr(parent);
 5801    if (strval) {
 5802        lhs << strval;
 5803    } else {
 5804        lhs << parent.value;
 5805    }
 5806}
 5807
 5808// --- emdi12.RefreshIndicator.value.SetStrptrMaybe
 5809// Convert string to field.
 5810// If the string is invalid, do not modify field and return false.
 5811// In case of success, return true
 5812bool emdi12::value_SetStrptrMaybe(emdi12::RefreshIndicator& parent, algo::strptr rhs) {
 5813    bool ret = false;
 5814    switch (elems_N(rhs)) {
 5815        case 1: {
 5816            switch (u64(rhs[0])) {
 5817                case 'N': {
 5818                    value_SetEnum(parent,emdi12_RefreshIndicator_N); ret = true; break;
 5819                }
 5820                case 'Y': {
 5821                    value_SetEnum(parent,emdi12_RefreshIndicator_Y); ret = true; break;
 5822                }
 5823            }
 5824            break;
 5825        }
 5826    }
 5827    return ret;
 5828}
 5829
 5830// --- emdi12.RefreshIndicator.value.SetStrptr
 5831// Convert string to field.
 5832// If the string is invalid, set numeric value to DFLT
 5833void emdi12::value_SetStrptr(emdi12::RefreshIndicator& parent, algo::strptr rhs, emdi12_RefreshIndicatorEnum dflt) {
 5834    if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
 5835}
 5836
 5837// --- emdi12.RefreshIndicator.value.ReadStrptrMaybe
 5838// Convert string to field. Return success value
 5839bool emdi12::value_ReadStrptrMaybe(emdi12::RefreshIndicator& parent, algo::strptr rhs) {
 5840    bool retval = false;
 5841    retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
 5842    if (!retval) { // didn't work? try reading as underlying type
 5843        retval = u32_ReadStrptrMaybe(parent.value,rhs);
 5844    }
 5845    return retval;
 5846}
 5847
 5848// --- emdi12.RefreshIndicator..ReadStrptrMaybe
 5849// Read fields of emdi12::RefreshIndicator from an ascii string.
 5850// The format of the string is the format of the emdi12::RefreshIndicator's only field
 5851bool emdi12::RefreshIndicator_ReadStrptrMaybe(emdi12::RefreshIndicator &parent, algo::strptr in_str) {
 5852    bool retval = true;
 5853    retval = retval && value_ReadStrptrMaybe(parent, in_str);
 5854    return retval;
 5855}
 5856
 5857// --- emdi12.RefreshIndicator..Print
 5858// print string representation of ROW to string STR
 5859// cfmt:emdi12.RefreshIndicator.String  printfmt:Raw
 5860void emdi12::RefreshIndicator_Print(emdi12::RefreshIndicator row, algo::cstring& str) {
 5861    emdi12::value_Print(row, str);
 5862}
 5863
 5864// --- emdi12.SecurityStatus.value.ToCstr
 5865// Convert numeric value of field to one of predefined string constants.
 5866// If string is found, return a static C string. Otherwise, return NULL.
 5867const char* emdi12::value_ToCstr(const emdi12::SecurityStatus& parent) {
 5868    const char *ret = NULL;
 5869    switch(value_GetEnum(parent)) {
 5870        case emdi12_SecurityStatus_1       : ret = "1";  break;
 5871        case emdi12_SecurityStatus_2       : ret = "2";  break;
 5872        case emdi12_SecurityStatus_4       : ret = "4";  break;
 5873        case emdi12_SecurityStatus_6       : ret = "6";  break;
 5874        case emdi12_SecurityStatus_7       : ret = "7";  break;
 5875        case emdi12_SecurityStatus_9       : ret = "9";  break;
 5876        case emdi12_SecurityStatus_10      : ret = "10";  break;
 5877        case emdi12_SecurityStatus_11      : ret = "11";  break;
 5878        case emdi12_SecurityStatus_12      : ret = "12";  break;
 5879    }
 5880    return ret;
 5881}
 5882
 5883// --- emdi12.SecurityStatus.value.Print
 5884// Convert value to a string. First, attempt conversion to a known string.
 5885// If no string matches, print value as a numeric value.
 5886void emdi12::value_Print(const emdi12::SecurityStatus& parent, algo::cstring &lhs) {
 5887    const char *strval = value_ToCstr(parent);
 5888    if (strval) {
 5889        lhs << strval;
 5890    } else {
 5891        lhs << parent.value;
 5892    }
 5893}
 5894
 5895// --- emdi12.SecurityStatus.value.SetStrptrMaybe
 5896// Convert string to field.
 5897// If the string is invalid, do not modify field and return false.
 5898// In case of success, return true
 5899bool emdi12::value_SetStrptrMaybe(emdi12::SecurityStatus& parent, algo::strptr rhs) {
 5900    bool ret = false;
 5901    switch (elems_N(rhs)) {
 5902        case 1: {
 5903            switch (u64(rhs[0])) {
 5904                case '1': {
 5905                    value_SetEnum(parent,emdi12_SecurityStatus_1); ret = true; break;
 5906                }
 5907                case '2': {
 5908                    value_SetEnum(parent,emdi12_SecurityStatus_2); ret = true; break;
 5909                }
 5910                case '4': {
 5911                    value_SetEnum(parent,emdi12_SecurityStatus_4); ret = true; break;
 5912                }
 5913                case '6': {
 5914                    value_SetEnum(parent,emdi12_SecurityStatus_6); ret = true; break;
 5915                }
 5916                case '7': {
 5917                    value_SetEnum(parent,emdi12_SecurityStatus_7); ret = true; break;
 5918                }
 5919                case '9': {
 5920                    value_SetEnum(parent,emdi12_SecurityStatus_9); ret = true; break;
 5921                }
 5922            }
 5923            break;
 5924        }
 5925        case 2: {
 5926            switch (u64(algo::ReadLE16(rhs.elems))) {
 5927                case LE_STR2('1','0'): {
 5928                    value_SetEnum(parent,emdi12_SecurityStatus_10); ret = true; break;
 5929                }
 5930                case LE_STR2('1','1'): {
 5931                    value_SetEnum(parent,emdi12_SecurityStatus_11); ret = true; break;
 5932                }
 5933                case LE_STR2('1','2'): {
 5934                    value_SetEnum(parent,emdi12_SecurityStatus_12); ret = true; break;
 5935                }
 5936            }
 5937            break;
 5938        }
 5939    }
 5940    return ret;
 5941}
 5942
 5943// --- emdi12.SecurityStatus.value.SetStrptr
 5944// Convert string to field.
 5945// If the string is invalid, set numeric value to DFLT
 5946void emdi12::value_SetStrptr(emdi12::SecurityStatus& parent, algo::strptr rhs, emdi12_SecurityStatusEnum dflt) {
 5947    if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
 5948}
 5949
 5950// --- emdi12.SecurityStatus.value.ReadStrptrMaybe
 5951// Convert string to field. Return success value
 5952bool emdi12::value_ReadStrptrMaybe(emdi12::SecurityStatus& parent, algo::strptr rhs) {
 5953    bool retval = false;
 5954    retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
 5955    if (!retval) { // didn't work? try reading as underlying type
 5956        retval = u32_ReadStrptrMaybe(parent.value,rhs);
 5957    }
 5958    return retval;
 5959}
 5960
 5961// --- emdi12.SecurityStatus..ReadStrptrMaybe
 5962// Read fields of emdi12::SecurityStatus from an ascii string.
 5963// The format of the string is the format of the emdi12::SecurityStatus's only field
 5964bool emdi12::SecurityStatus_ReadStrptrMaybe(emdi12::SecurityStatus &parent, algo::strptr in_str) {
 5965    bool retval = true;
 5966    retval = retval && value_ReadStrptrMaybe(parent, in_str);
 5967    return retval;
 5968}
 5969
 5970// --- emdi12.SecurityStatus..Print
 5971// print string representation of ROW to string STR
 5972// cfmt:emdi12.SecurityStatus.String  printfmt:Raw
 5973void emdi12::SecurityStatus_Print(emdi12::SecurityStatus row, algo::cstring& str) {
 5974    emdi12::value_Print(row, str);
 5975}
 5976
 5977// --- emdi12.MDBookType.value.ToCstr
 5978// Convert numeric value of field to one of predefined string constants.
 5979// If string is found, return a static C string. Otherwise, return NULL.
 5980const char* emdi12::value_ToCstr(const emdi12::MDBookType& parent) {
 5981    const char *ret = NULL;
 5982    switch(value_GetEnum(parent)) {
 5983        case emdi12_MDBookType_1           : ret = "1";  break;
 5984        case emdi12_MDBookType_2           : ret = "2";  break;
 5985        case emdi12_MDBookType_3           : ret = "3";  break;
 5986    }
 5987    return ret;
 5988}
 5989
 5990// --- emdi12.MDBookType.value.Print
 5991// Convert value to a string. First, attempt conversion to a known string.
 5992// If no string matches, print value as a numeric value.
 5993void emdi12::value_Print(const emdi12::MDBookType& parent, algo::cstring &lhs) {
 5994    const char *strval = value_ToCstr(parent);
 5995    if (strval) {
 5996        lhs << strval;
 5997    } else {
 5998        lhs << parent.value;
 5999    }
 6000}
 6001
 6002// --- emdi12.MDBookType.value.SetStrptrMaybe
 6003// Convert string to field.
 6004// If the string is invalid, do not modify field and return false.
 6005// In case of success, return true
 6006bool emdi12::value_SetStrptrMaybe(emdi12::MDBookType& parent, algo::strptr rhs) {
 6007    bool ret = false;
 6008    switch (elems_N(rhs)) {
 6009        case 1: {
 6010            switch (u64(rhs[0])) {
 6011                case '1': {
 6012                    value_SetEnum(parent,emdi12_MDBookType_1); ret = true; break;
 6013                }
 6014                case '2': {
 6015                    value_SetEnum(parent,emdi12_MDBookType_2); ret = true; break;
 6016                }
 6017                case '3': {
 6018                    value_SetEnum(parent,emdi12_MDBookType_3); ret = true; break;
 6019                }
 6020            }
 6021            break;
 6022        }
 6023    }
 6024    return ret;
 6025}
 6026
 6027// --- emdi12.MDBookType.value.SetStrptr
 6028// Convert string to field.
 6029// If the string is invalid, set numeric value to DFLT
 6030void emdi12::value_SetStrptr(emdi12::MDBookType& parent, algo::strptr rhs, emdi12_MDBookTypeEnum dflt) {
 6031    if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
 6032}
 6033
 6034// --- emdi12.MDBookType.value.ReadStrptrMaybe
 6035// Convert string to field. Return success value
 6036bool emdi12::value_ReadStrptrMaybe(emdi12::MDBookType& parent, algo::strptr rhs) {
 6037    bool retval = false;
 6038    retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
 6039    if (!retval) { // didn't work? try reading as underlying type
 6040        retval = u32_ReadStrptrMaybe(parent.value,rhs);
 6041    }
 6042    return retval;
 6043}
 6044
 6045// --- emdi12.MDBookType..ReadStrptrMaybe
 6046// Read fields of emdi12::MDBookType from an ascii string.
 6047// The format of the string is the format of the emdi12::MDBookType's only field
 6048bool emdi12::MDBookType_ReadStrptrMaybe(emdi12::MDBookType &parent, algo::strptr in_str) {
 6049    bool retval = true;
 6050    retval = retval && value_ReadStrptrMaybe(parent, in_str);
 6051    return retval;
 6052}
 6053
 6054// --- emdi12.MDBookType..Print
 6055// print string representation of ROW to string STR
 6056// cfmt:emdi12.MDBookType.String  printfmt:Raw
 6057void emdi12::MDBookType_Print(emdi12::MDBookType row, algo::cstring& str) {
 6058    emdi12::value_Print(row, str);
 6059}
 6060
 6061// --- emdi12.MDSubBookType.value.ToCstr
 6062// Convert numeric value of field to one of predefined string constants.
 6063// If string is found, return a static C string. Otherwise, return NULL.
 6064const char* emdi12::value_ToCstr(const emdi12::MDSubBookType& parent) {
 6065    const char *ret = NULL;
 6066    switch(value_GetEnum(parent)) {
 6067        case emdi12_MDSubBookType_1        : ret = "1";  break;
 6068        case emdi12_MDSubBookType_2        : ret = "2";  break;
 6069    }
 6070    return ret;
 6071}
 6072
 6073// --- emdi12.MDSubBookType.value.Print
 6074// Convert value to a string. First, attempt conversion to a known string.
 6075// If no string matches, print value as a numeric value.
 6076void emdi12::value_Print(const emdi12::MDSubBookType& parent, algo::cstring &lhs) {
 6077    const char *strval = value_ToCstr(parent);
 6078    if (strval) {
 6079        lhs << strval;
 6080    } else {
 6081        lhs << parent.value;
 6082    }
 6083}
 6084
 6085// --- emdi12.MDSubBookType.value.SetStrptrMaybe
 6086// Convert string to field.
 6087// If the string is invalid, do not modify field and return false.
 6088// In case of success, return true
 6089bool emdi12::value_SetStrptrMaybe(emdi12::MDSubBookType& parent, algo::strptr rhs) {
 6090    bool ret = false;
 6091    switch (elems_N(rhs)) {
 6092        case 1: {
 6093            switch (u64(rhs[0])) {
 6094                case '1': {
 6095                    value_SetEnum(parent,emdi12_MDSubBookType_1); ret = true; break;
 6096                }
 6097                case '2': {
 6098                    value_SetEnum(parent,emdi12_MDSubBookType_2); ret = true; break;
 6099                }
 6100            }
 6101            break;
 6102        }
 6103    }
 6104    return ret;
 6105}
 6106
 6107// --- emdi12.MDSubBookType.value.SetStrptr
 6108// Convert string to field.
 6109// If the string is invalid, set numeric value to DFLT
 6110void emdi12::value_SetStrptr(emdi12::MDSubBookType& parent, algo::strptr rhs, emdi12_MDSubBookTypeEnum dflt) {
 6111    if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
 6112}
 6113
 6114// --- emdi12.MDSubBookType.value.ReadStrptrMaybe
 6115// Convert string to field. Return success value
 6116bool emdi12::value_ReadStrptrMaybe(emdi12::MDSubBookType& parent, algo::strptr rhs) {
 6117    bool retval = false;
 6118    retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
 6119    if (!retval) { // didn't work? try reading as underlying type
 6120        retval = u32_ReadStrptrMaybe(parent.value,rhs);
 6121    }
 6122    return retval;
 6123}
 6124
 6125// --- emdi12.MDSubBookType..ReadStrptrMaybe
 6126// Read fields of emdi12::MDSubBookType from an ascii string.
 6127// The format of the string is the format of the emdi12::MDSubBookType's only field
 6128bool emdi12::MDSubBookType_ReadStrptrMaybe(emdi12::MDSubBookType &parent, algo::strptr in_str) {
 6129    bool retval = true;
 6130    retval = retval && value_ReadStrptrMaybe(parent, in_str);
 6131    return retval;
 6132}
 6133
 6134// --- emdi12.MDSubBookType..Print
 6135// print string representation of ROW to string STR
 6136// cfmt:emdi12.MDSubBookType.String  printfmt:Raw
 6137void emdi12::MDSubBookType_Print(emdi12::MDSubBookType row, algo::cstring& str) {
 6138    emdi12::value_Print(row, str);
 6139}
 6140
 6141// --- emdi12.TradingSessionID.value.ToCstr
 6142// Convert numeric value of field to one of predefined string constants.
 6143// If string is found, return a static C string. Otherwise, return NULL.
 6144const char* emdi12::value_ToCstr(const emdi12::TradingSessionID& parent) {
 6145    const char *ret = NULL;
 6146    switch(value_GetEnum(parent)) {
 6147        case emdi12_TradingSessionID_1     : ret = "1";  break;
 6148        case emdi12_TradingSessionID_3     : ret = "3";  break;
 6149        case emdi12_TradingSessionID_5     : ret = "5";  break;
 6150        case emdi12_TradingSessionID_6     : ret = "6";  break;
 6151        case emdi12_TradingSessionID_7     : ret = "7";  break;
 6152    }
 6153    return ret;
 6154}
 6155
 6156// --- emdi12.TradingSessionID.value.Print
 6157// Convert value to a string. First, attempt conversion to a known string.
 6158// If no string matches, print value as a numeric value.
 6159void emdi12::value_Print(const emdi12::TradingSessionID& parent, algo::cstring &lhs) {
 6160    const char *strval = value_ToCstr(parent);
 6161    if (strval) {
 6162        lhs << strval;
 6163    } else {
 6164        lhs << parent.value;
 6165    }
 6166}
 6167
 6168// --- emdi12.TradingSessionID.value.SetStrptrMaybe
 6169// Convert string to field.
 6170// If the string is invalid, do not modify field and return false.
 6171// In case of success, return true
 6172bool emdi12::value_SetStrptrMaybe(emdi12::TradingSessionID& parent, algo::strptr rhs) {
 6173    bool ret = false;
 6174    switch (elems_N(rhs)) {
 6175        case 1: {
 6176            switch (u64(rhs[0])) {
 6177                case '1': {
 6178                    value_SetEnum(parent,emdi12_TradingSessionID_1); ret = true; break;
 6179                }
 6180                case '3': {
 6181                    value_SetEnum(parent,emdi12_TradingSessionID_3); ret = true; break;
 6182                }
 6183                case '5': {
 6184                    value_SetEnum(parent,emdi12_TradingSessionID_5); ret = true; break;
 6185                }
 6186                case '6': {
 6187                    value_SetEnum(parent,emdi12_TradingSessionID_6); ret = true; break;
 6188                }
 6189                case '7': {
 6190                    value_SetEnum(parent,emdi12_TradingSessionID_7); ret = true; break;
 6191                }
 6192            }
 6193            break;
 6194        }
 6195    }
 6196    return ret;
 6197}
 6198
 6199// --- emdi12.TradingSessionID.value.SetStrptr
 6200// Convert string to field.
 6201// If the string is invalid, set numeric value to DFLT
 6202void emdi12::value_SetStrptr(emdi12::TradingSessionID& parent, algo::strptr rhs, emdi12_TradingSessionIDEnum dflt) {
 6203    if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
 6204}
 6205
 6206// --- emdi12.TradingSessionID.value.ReadStrptrMaybe
 6207// Convert string to field. Return success value
 6208bool emdi12::value_ReadStrptrMaybe(emdi12::TradingSessionID& parent, algo::strptr rhs) {
 6209    bool retval = false;
 6210    retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
 6211    if (!retval) { // didn't work? try reading as underlying type
 6212        retval = u32_ReadStrptrMaybe(parent.value,rhs);
 6213    }
 6214    return retval;
 6215}
 6216
 6217// --- emdi12.TradingSessionID..ReadStrptrMaybe
 6218// Read fields of emdi12::TradingSessionID from an ascii string.
 6219// The format of the string is the format of the emdi12::TradingSessionID's only field
 6220bool emdi12::TradingSessionID_ReadStrptrMaybe(emdi12::TradingSessionID &parent, algo::strptr in_str) {
 6221    bool retval = true;
 6222    retval = retval && value_ReadStrptrMaybe(parent, in_str);
 6223    return retval;
 6224}
 6225
 6226// --- emdi12.TradingSessionID..Print
 6227// print string representation of ROW to string STR
 6228// cfmt:emdi12.TradingSessionID.String  printfmt:Raw
 6229void emdi12::TradingSessionID_Print(emdi12::TradingSessionID row, algo::cstring& str) {
 6230    emdi12::value_Print(row, str);
 6231}
 6232
 6233// --- emdi12.TradingSessionSubID.value.ToCstr
 6234// Convert numeric value of field to one of predefined string constants.
 6235// If string is found, return a static C string. Otherwise, return NULL.
 6236const char* emdi12::value_ToCstr(const emdi12::TradingSessionSubID& parent) {
 6237    const char *ret = NULL;
 6238    switch(value_GetEnum(parent)) {
 6239        case emdi12_TradingSessionSubID_1  : ret = "1";  break;
 6240        case emdi12_TradingSessionSubID_3  : ret = "3";  break;
 6241        case emdi12_TradingSessionSubID_4  : ret = "4";  break;
 6242        case emdi12_TradingSessionSubID_5  : ret = "5";  break;
 6243        case emdi12_TradingSessionSubID_6  : ret = "6";  break;
 6244        case emdi12_TradingSessionSubID_7  : ret = "7";  break;
 6245        case emdi12_TradingSessionSubID_8  : ret = "8";  break;
 6246        case emdi12_TradingSessionSubID_103: ret = "103";  break;
 6247        case emdi12_TradingSessionSubID_104: ret = "104";  break;
 6248    }
 6249    return ret;
 6250}
 6251
 6252// --- emdi12.TradingSessionSubID.value.Print
 6253// Convert value to a string. First, attempt conversion to a known string.
 6254// If no string matches, print value as a numeric value.
 6255void emdi12::value_Print(const emdi12::TradingSessionSubID& parent, algo::cstring &lhs) {
 6256    const char *strval = value_ToCstr(parent);
 6257    if (strval) {
 6258        lhs << strval;
 6259    } else {
 6260        lhs << parent.value;
 6261    }
 6262}
 6263
 6264// --- emdi12.TradingSessionSubID.value.SetStrptrMaybe
 6265// Convert string to field.
 6266// If the string is invalid, do not modify field and return false.
 6267// In case of success, return true
 6268bool emdi12::value_SetStrptrMaybe(emdi12::TradingSessionSubID& parent, algo::strptr rhs) {
 6269    bool ret = false;
 6270    switch (elems_N(rhs)) {
 6271        case 1: {
 6272            switch (u64(rhs[0])) {
 6273                case '1': {
 6274                    value_SetEnum(parent,emdi12_TradingSessionSubID_1); ret = true; break;
 6275                }
 6276                case '3': {
 6277                    value_SetEnum(parent,emdi12_TradingSessionSubID_3); ret = true; break;
 6278                }
 6279                case '4': {
 6280                    value_SetEnum(parent,emdi12_TradingSessionSubID_4); ret = true; break;
 6281                }
 6282                case '5': {
 6283                    value_SetEnum(parent,emdi12_TradingSessionSubID_5); ret = true; break;
 6284                }
 6285                case '6': {
 6286                    value_SetEnum(parent,emdi12_TradingSessionSubID_6); ret = true; break;
 6287                }
 6288                case '7': {
 6289                    value_SetEnum(parent,emdi12_TradingSessionSubID_7); ret = true; break;
 6290                }
 6291                case '8': {
 6292                    value_SetEnum(parent,emdi12_TradingSessionSubID_8); ret = true; break;
 6293                }
 6294            }
 6295            break;
 6296        }
 6297        case 3: {
 6298            switch (u64(algo::ReadLE16(rhs.elems))|(u64(rhs[2])<<16)) {
 6299                case LE_STR3('1','0','3'): {
 6300                    value_SetEnum(parent,emdi12_TradingSessionSubID_103); ret = true; break;
 6301                }
 6302                case LE_STR3('1','0','4'): {
 6303                    value_SetEnum(parent,emdi12_TradingSessionSubID_104); ret = true; break;
 6304                }
 6305            }
 6306            break;
 6307        }
 6308    }
 6309    return ret;
 6310}
 6311
 6312// --- emdi12.TradingSessionSubID.value.SetStrptr
 6313// Convert string to field.
 6314// If the string is invalid, set numeric value to DFLT
 6315void emdi12::value_SetStrptr(emdi12::TradingSessionSubID& parent, algo::strptr rhs, emdi12_TradingSessionSubIDEnum dflt) {
 6316    if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
 6317}
 6318
 6319// --- emdi12.TradingSessionSubID.value.ReadStrptrMaybe
 6320// Convert string to field. Return success value
 6321bool emdi12::value_ReadStrptrMaybe(emdi12::TradingSessionSubID& parent, algo::strptr rhs) {
 6322    bool retval = false;
 6323    retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
 6324    if (!retval) { // didn't work? try reading as underlying type
 6325        retval = u32_ReadStrptrMaybe(parent.value,rhs);
 6326    }
 6327    return retval;
 6328}
 6329
 6330// --- emdi12.TradingSessionSubID..ReadStrptrMaybe
 6331// Read fields of emdi12::TradingSessionSubID from an ascii string.
 6332// The format of the string is the format of the emdi12::TradingSessionSubID's only field
 6333bool emdi12::TradingSessionSubID_ReadStrptrMaybe(emdi12::TradingSessionSubID &parent, algo::strptr in_str) {
 6334    bool retval = true;
 6335    retval = retval && value_ReadStrptrMaybe(parent, in_str);
 6336    return retval;
 6337}
 6338
 6339// --- emdi12.TradingSessionSubID..Print
 6340// print string representation of ROW to string STR
 6341// cfmt:emdi12.TradingSessionSubID.String  printfmt:Raw
 6342void emdi12::TradingSessionSubID_Print(emdi12::TradingSessionSubID row, algo::cstring& str) {
 6343    emdi12::value_Print(row, str);
 6344}
 6345
 6346// --- emdi12.TradSesStatus.value.ToCstr
 6347// Convert numeric value of field to one of predefined string constants.
 6348// If string is found, return a static C string. Otherwise, return NULL.
 6349const char* emdi12::value_ToCstr(const emdi12::TradSesStatus& parent) {
 6350    const char *ret = NULL;
 6351    switch(value_GetEnum(parent)) {
 6352        case emdi12_TradSesStatus_1        : ret = "1";  break;
 6353        case emdi12_TradSesStatus_2        : ret = "2";  break;
 6354        case emdi12_TradSesStatus_3        : ret = "3";  break;
 6355        case emdi12_TradSesStatus_5        : ret = "5";  break;
 6356    }
 6357    return ret;
 6358}
 6359
 6360// --- emdi12.TradSesStatus.value.Print
 6361// Convert value to a string. First, attempt conversion to a known string.
 6362// If no string matches, print value as a numeric value.
 6363void emdi12::value_Print(const emdi12::TradSesStatus& parent, algo::cstring &lhs) {
 6364    const char *strval = value_ToCstr(parent);
 6365    if (strval) {
 6366        lhs << strval;
 6367    } else {
 6368        lhs << parent.value;
 6369    }
 6370}
 6371
 6372// --- emdi12.TradSesStatus.value.SetStrptrMaybe
 6373// Convert string to field.
 6374// If the string is invalid, do not modify field and return false.
 6375// In case of success, return true
 6376bool emdi12::value_SetStrptrMaybe(emdi12::TradSesStatus& parent, algo::strptr rhs) {
 6377    bool ret = false;
 6378    switch (elems_N(rhs)) {
 6379        case 1: {
 6380            switch (u64(rhs[0])) {
 6381                case '1': {
 6382                    value_SetEnum(parent,emdi12_TradSesStatus_1); ret = true; break;
 6383                }
 6384                case '2': {
 6385                    value_SetEnum(parent,emdi12_TradSesStatus_2); ret = true; break;
 6386                }
 6387                case '3': {
 6388                    value_SetEnum(parent,emdi12_TradSesStatus_3); ret = true; break;
 6389                }
 6390                case '5': {
 6391                    value_SetEnum(parent,emdi12_TradSesStatus_5); ret = true; break;
 6392                }
 6393            }
 6394            break;
 6395        }
 6396    }
 6397    return ret;
 6398}
 6399
 6400// --- emdi12.TradSesStatus.value.SetStrptr
 6401// Convert string to field.
 6402// If the string is invalid, set numeric value to DFLT
 6403void emdi12::value_SetStrptr(emdi12::TradSesStatus& parent, algo::strptr rhs, emdi12_TradSesStatusEnum dflt) {
 6404    if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
 6405}
 6406
 6407// --- emdi12.TradSesStatus.value.ReadStrptrMaybe
 6408// Convert string to field. Return success value
 6409bool emdi12::value_ReadStrptrMaybe(emdi12::TradSesStatus& parent, algo::strptr rhs) {
 6410    bool retval = false;
 6411    retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
 6412    if (!retval) { // didn't work? try reading as underlying type
 6413        retval = u32_ReadStrptrMaybe(parent.value,rhs);
 6414    }
 6415    return retval;
 6416}
 6417
 6418// --- emdi12.TradSesStatus..ReadStrptrMaybe
 6419// Read fields of emdi12::TradSesStatus from an ascii string.
 6420// The format of the string is the format of the emdi12::TradSesStatus's only field
 6421bool emdi12::TradSesStatus_ReadStrptrMaybe(emdi12::TradSesStatus &parent, algo::strptr in_str) {
 6422    bool retval = true;
 6423    retval = retval && value_ReadStrptrMaybe(parent, in_str);
 6424    return retval;
 6425}
 6426
 6427// --- emdi12.TradSesStatus..Print
 6428// print string representation of ROW to string STR
 6429// cfmt:emdi12.TradSesStatus.String  printfmt:Raw
 6430void emdi12::TradSesStatus_Print(emdi12::TradSesStatus row, algo::cstring& str) {
 6431    emdi12::value_Print(row, str);
 6432}
 6433
 6434// --- emdi12.SecurityTradingStatus.value.ToCstr
 6435// Convert numeric value of field to one of predefined string constants.
 6436// If string is found, return a static C string. Otherwise, return NULL.
 6437const char* emdi12::value_ToCstr(const emdi12::SecurityTradingStatus& parent) {
 6438    const char *ret = NULL;
 6439    switch(value_GetEnum(parent)) {
 6440        case emdi12_SecurityTradingStatus_2: ret = "2";  break;
 6441        case emdi12_SecurityTradingStatus_200: ret = "200";  break;
 6442        case emdi12_SecurityTradingStatus_201: ret = "201";  break;
 6443        case emdi12_SecurityTradingStatus_202: ret = "202";  break;
 6444        case emdi12_SecurityTradingStatus_203: ret = "203";  break;
 6445        case emdi12_SecurityTradingStatus_204: ret = "204";  break;
 6446        case emdi12_SecurityTradingStatus_205: ret = "205";  break;
 6447        case emdi12_SecurityTradingStatus_206: ret = "206";  break;
 6448        case emdi12_SecurityTradingStatus_207: ret = "207";  break;
 6449        case emdi12_SecurityTradingStatus_208: ret = "208";  break;
 6450        case emdi12_SecurityTradingStatus_209: ret = "209";  break;
 6451        case emdi12_SecurityTradingStatus_210: ret = "210";  break;
 6452        case emdi12_SecurityTradingStatus_211: ret = "211";  break;
 6453        case emdi12_SecurityTradingStatus_212: ret = "212";  break;
 6454        case emdi12_SecurityTradingStatus_213: ret = "213";  break;
 6455        case emdi12_SecurityTradingStatus_214: ret = "214";  break;
 6456        case emdi12_SecurityTradingStatus_215: ret = "215";  break;
 6457        case emdi12_SecurityTradingStatus_216: ret = "216";  break;
 6458        case emdi12_SecurityTradingStatus_217: ret = "217";  break;
 6459    }
 6460    return ret;
 6461}
 6462
 6463// --- emdi12.SecurityTradingStatus.value.Print
 6464// Convert value to a string. First, attempt conversion to a known string.
 6465// If no string matches, print value as a numeric value.
 6466void emdi12::value_Print(const emdi12::SecurityTradingStatus& parent, algo::cstring &lhs) {
 6467    const char *strval = value_ToCstr(parent);
 6468    if (strval) {
 6469        lhs << strval;
 6470    } else {
 6471        lhs << parent.value;
 6472    }
 6473}
 6474
 6475// --- emdi12.SecurityTradingStatus.value.SetStrptrMaybe
 6476// Convert string to field.
 6477// If the string is invalid, do not modify field and return false.
 6478// In case of success, return true
 6479bool emdi12::value_SetStrptrMaybe(emdi12::SecurityTradingStatus& parent, algo::strptr rhs) {
 6480    bool ret = false;
 6481    switch (elems_N(rhs)) {
 6482        case 1: {
 6483            switch (u64(rhs[0])) {
 6484                case '2': {
 6485                    value_SetEnum(parent,emdi12_SecurityTradingStatus_2); ret = true; break;
 6486                }
 6487            }
 6488            break;
 6489        }
 6490        case 3: {
 6491            switch (u64(algo::ReadLE16(rhs.elems))|(u64(rhs[2])<<16)) {
 6492                case LE_STR3('2','0','0'): {
 6493                    value_SetEnum(parent,emdi12_SecurityTradingStatus_200); ret = true; break;
 6494                }
 6495                case LE_STR3('2','0','1'): {
 6496                    value_SetEnum(parent,emdi12_SecurityTradingStatus_201); ret = true; break;
 6497                }
 6498                case LE_STR3('2','0','2'): {
 6499                    value_SetEnum(parent,emdi12_SecurityTradingStatus_202); ret = true; break;
 6500                }
 6501                case LE_STR3('2','0','3'): {
 6502                    value_SetEnum(parent,emdi12_SecurityTradingStatus_203); ret = true; break;
 6503                }
 6504                case LE_STR3('2','0','4'): {
 6505                    value_SetEnum(parent,emdi12_SecurityTradingStatus_204); ret = true; break;
 6506                }
 6507                case LE_STR3('2','0','5'): {
 6508                    value_SetEnum(parent,emdi12_SecurityTradingStatus_205); ret = true; break;
 6509                }
 6510                case LE_STR3('2','0','6'): {
 6511                    value_SetEnum(parent,emdi12_SecurityTradingStatus_206); ret = true; break;
 6512                }
 6513                case LE_STR3('2','0','7'): {
 6514                    value_SetEnum(parent,emdi12_SecurityTradingStatus_207); ret = true; break;
 6515                }
 6516                case LE_STR3('2','0','8'): {
 6517                    value_SetEnum(parent,emdi12_SecurityTradingStatus_208); ret = true; break;
 6518                }
 6519                case LE_STR3('2','0','9'): {
 6520                    value_SetEnum(parent,emdi12_SecurityTradingStatus_209); ret = true; break;
 6521                }
 6522                case LE_STR3('2','1','0'): {
 6523                    value_SetEnum(parent,emdi12_SecurityTradingStatus_210); ret = true; break;
 6524                }
 6525                case LE_STR3('2','1','1'): {
 6526                    value_SetEnum(parent,emdi12_SecurityTradingStatus_211); ret = true; break;
 6527                }
 6528                case LE_STR3('2','1','2'): {
 6529                    value_SetEnum(parent,emdi12_SecurityTradingStatus_212); ret = true; break;
 6530                }
 6531                case LE_STR3('2','1','3'): {
 6532                    value_SetEnum(parent,emdi12_SecurityTradingStatus_213); ret = true; break;
 6533                }
 6534                case LE_STR3('2','1','4'): {
 6535                    value_SetEnum(parent,emdi12_SecurityTradingStatus_214); ret = true; break;
 6536                }
 6537                case LE_STR3('2','1','5'): {
 6538                    value_SetEnum(parent,emdi12_SecurityTradingStatus_215); ret = true; break;
 6539                }
 6540                case LE_STR3('2','1','6'): {
 6541                    value_SetEnum(parent,emdi12_SecurityTradingStatus_216); ret = true; break;
 6542                }
 6543                case LE_STR3('2','1','7'): {
 6544                    value_SetEnum(parent,emdi12_SecurityTradingStatus_217); ret = true; break;
 6545                }
 6546            }
 6547            break;
 6548        }
 6549    }
 6550    return ret;
 6551}
 6552
 6553// --- emdi12.SecurityTradingStatus.value.SetStrptr
 6554// Convert string to field.
 6555// If the string is invalid, set numeric value to DFLT
 6556void emdi12::value_SetStrptr(emdi12::SecurityTradingStatus& parent, algo::strptr rhs, emdi12_SecurityTradingStatusEnum dflt) {
 6557    if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
 6558}
 6559
 6560// --- emdi12.SecurityTradingStatus.value.ReadStrptrMaybe
 6561// Convert string to field. Return success value
 6562bool emdi12::value_ReadStrptrMaybe(emdi12::SecurityTradingStatus& parent, algo::strptr rhs) {
 6563    bool retval = false;
 6564    retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
 6565    if (!retval) { // didn't work? try reading as underlying type
 6566        retval = u32_ReadStrptrMaybe(parent.value,rhs);
 6567    }
 6568    return retval;
 6569}
 6570
 6571// --- emdi12.SecurityTradingStatus..ReadStrptrMaybe
 6572// Read fields of emdi12::SecurityTradingStatus from an ascii string.
 6573// The format of the string is the format of the emdi12::SecurityTradingStatus's only field
 6574bool emdi12::SecurityTradingStatus_ReadStrptrMaybe(emdi12::SecurityTradingStatus &parent, algo::strptr in_str) {
 6575    bool retval = true;
 6576    retval = retval && value_ReadStrptrMaybe(parent, in_str);
 6577    return retval;
 6578}
 6579
 6580// --- emdi12.SecurityTradingStatus..Print
 6581// print string representation of ROW to string STR
 6582// cfmt:emdi12.SecurityTradingStatus.String  printfmt:Raw
 6583void emdi12::SecurityTradingStatus_Print(emdi12::SecurityTradingStatus row, algo::cstring& str) {
 6584    emdi12::value_Print(row, str);
 6585}
 6586
 6587// --- emdi12.MarketCondition.value.ToCstr
 6588// Convert numeric value of field to one of predefined string constants.
 6589// If string is found, return a static C string. Otherwise, return NULL.
 6590const char* emdi12::value_ToCstr(const emdi12::MarketCondition& parent) {
 6591    const char *ret = NULL;
 6592    switch(value_GetEnum(parent)) {
 6593        case emdi12_MarketCondition_0      : ret = "0";  break;
 6594        case emdi12_MarketCondition_1      : ret = "1";  break;
 6595    }
 6596    return ret;
 6597}
 6598
 6599// --- emdi12.MarketCondition.value.Print
 6600// Convert value to a string. First, attempt conversion to a known string.
 6601// If no string matches, print value as a numeric value.
 6602void emdi12::value_Print(const emdi12::MarketCondition& parent, algo::cstring &lhs) {
 6603    const char *strval = value_ToCstr(parent);
 6604    if (strval) {
 6605        lhs << strval;
 6606    } else {
 6607        lhs << parent.value;
 6608    }
 6609}
 6610
 6611// --- emdi12.MarketCondition.value.SetStrptrMaybe
 6612// Convert string to field.
 6613// If the string is invalid, do not modify field and return false.
 6614// In case of success, return true
 6615bool emdi12::value_SetStrptrMaybe(emdi12::MarketCondition& parent, algo::strptr rhs) {
 6616    bool ret = false;
 6617    switch (elems_N(rhs)) {
 6618        case 1: {
 6619            switch (u64(rhs[0])) {
 6620                case '0': {
 6621                    value_SetEnum(parent,emdi12_MarketCondition_0); ret = true; break;
 6622                }
 6623                case '1': {
 6624                    value_SetEnum(parent,emdi12_MarketCondition_1); ret = true; break;
 6625                }
 6626            }
 6627            break;
 6628        }
 6629    }
 6630    return ret;
 6631}
 6632
 6633// --- emdi12.MarketCondition.value.SetStrptr
 6634// Convert string to field.
 6635// If the string is invalid, set numeric value to DFLT
 6636void emdi12::value_SetStrptr(emdi12::MarketCondition& parent, algo::strptr rhs, emdi12_MarketConditionEnum dflt) {
 6637    if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
 6638}
 6639
 6640// --- emdi12.MarketCondition.value.ReadStrptrMaybe
 6641// Convert string to field. Return success value
 6642bool emdi12::value_ReadStrptrMaybe(emdi12::MarketCondition& parent, algo::strptr rhs) {
 6643    bool retval = false;
 6644    retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
 6645    if (!retval) { // didn't work? try reading as underlying type
 6646        retval = u32_ReadStrptrMaybe(parent.value,rhs);
 6647    }
 6648    return retval;
 6649}
 6650
 6651// --- emdi12.MarketCondition..ReadStrptrMaybe
 6652// Read fields of emdi12::MarketCondition from an ascii string.
 6653// The format of the string is the format of the emdi12::MarketCondition's only field
 6654bool emdi12::MarketCondition_ReadStrptrMaybe(emdi12::MarketCondition &parent, algo::strptr in_str) {
 6655    bool retval = true;
 6656    retval = retval && value_ReadStrptrMaybe(parent, in_str);
 6657    return retval;
 6658}
 6659
 6660// --- emdi12.MarketCondition..Print
 6661// print string representation of ROW to string STR
 6662// cfmt:emdi12.MarketCondition.String  printfmt:Raw
 6663void emdi12::MarketCondition_Print(emdi12::MarketCondition row, algo::cstring& str) {
 6664    emdi12::value_Print(row, str);
 6665}
 6666
 6667// --- emdi12.FastMarketIndicator.value.ToCstr
 6668// Convert numeric value of field to one of predefined string constants.
 6669// If string is found, return a static C string. Otherwise, return NULL.
 6670const char* emdi12::value_ToCstr(const emdi12::FastMarketIndicator& parent) {
 6671    const char *ret = NULL;
 6672    switch(value_GetEnum(parent)) {
 6673        case emdi12_FastMarketIndicator_0  : ret = "0";  break;
 6674        case emdi12_FastMarketIndicator_1  : ret = "1";  break;
 6675    }
 6676    return ret;
 6677}
 6678
 6679// --- emdi12.FastMarketIndicator.value.Print
 6680// Convert value to a string. First, attempt conversion to a known string.
 6681// If no string matches, print value as a numeric value.
 6682void emdi12::value_Print(const emdi12::FastMarketIndicator& parent, algo::cstring &lhs) {
 6683    const char *strval = value_ToCstr(parent);
 6684    if (strval) {
 6685        lhs << strval;
 6686    } else {
 6687        lhs << parent.value;
 6688    }
 6689}
 6690
 6691// --- emdi12.FastMarketIndicator.value.SetStrptrMaybe
 6692// Convert string to field.
 6693// If the string is invalid, do not modify field and return false.
 6694// In case of success, return true
 6695bool emdi12::value_SetStrptrMaybe(emdi12::FastMarketIndicator& parent, algo::strptr rhs) {
 6696    bool ret = false;
 6697    switch (elems_N(rhs)) {
 6698        case 1: {
 6699            switch (u64(rhs[0])) {
 6700                case '0': {
 6701                    value_SetEnum(parent,emdi12_FastMarketIndicator_0); ret = true; break;
 6702                }
 6703                case '1': {
 6704                    value_SetEnum(parent,emdi12_FastMarketIndicator_1); ret = true; break;
 6705                }
 6706            }
 6707            break;
 6708        }
 6709    }
 6710    return ret;
 6711}
 6712
 6713// --- emdi12.FastMarketIndicator.value.SetStrptr
 6714// Convert string to field.
 6715// If the string is invalid, set numeric value to DFLT
 6716void emdi12::value_SetStrptr(emdi12::FastMarketIndicator& parent, algo::strptr rhs, emdi12_FastMarketIndicatorEnum dflt) {
 6717    if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
 6718}
 6719
 6720// --- emdi12.FastMarketIndicator.value.ReadStrptrMaybe
 6721// Convert string to field. Return success value
 6722bool emdi12::value_ReadStrptrMaybe(emdi12::FastMarketIndicator& parent, algo::strptr rhs) {
 6723    bool retval = false;
 6724    retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
 6725    if (!retval) { // didn't work? try reading as underlying type
 6726        retval = u32_ReadStrptrMaybe(parent.value,rhs);
 6727    }
 6728    return retval;
 6729}
 6730
 6731// --- emdi12.FastMarketIndicator..ReadStrptrMaybe
 6732// Read fields of emdi12::FastMarketIndicator from an ascii string.
 6733// The format of the string is the format of the emdi12::FastMarketIndicator's only field
 6734bool emdi12::FastMarketIndicator_ReadStrptrMaybe(emdi12::FastMarketIndicator &parent, algo::strptr in_str) {
 6735    bool retval = true;
 6736    retval = retval && value_ReadStrptrMaybe(parent, in_str);
 6737    return retval;
 6738}
 6739
 6740// --- emdi12.FastMarketIndicator..Print
 6741// print string representation of ROW to string STR
 6742// cfmt:emdi12.FastMarketIndicator.String  printfmt:Raw
 6743void emdi12::FastMarketIndicator_Print(emdi12::FastMarketIndicator row, algo::cstring& str) {
 6744    emdi12::value_Print(row, str);
 6745}
 6746
 6747// --- emdi12.SoldOutIndicator.value.ToCstr
 6748// Convert numeric value of field to one of predefined string constants.
 6749// If string is found, return a static C string. Otherwise, return NULL.
 6750const char* emdi12::value_ToCstr(const emdi12::SoldOutIndicator& parent) {
 6751    const char *ret = NULL;
 6752    switch(value_GetEnum(parent)) {
 6753        case emdi12_SoldOutIndicator_1     : ret = "1";  break;
 6754    }
 6755    return ret;
 6756}
 6757
 6758// --- emdi12.SoldOutIndicator.value.Print
 6759// Convert value to a string. First, attempt conversion to a known string.
 6760// If no string matches, print value as a numeric value.
 6761void emdi12::value_Print(const emdi12::SoldOutIndicator& parent, algo::cstring &lhs) {
 6762    const char *strval = value_ToCstr(parent);
 6763    if (strval) {
 6764        lhs << strval;
 6765    } else {
 6766        lhs << parent.value;
 6767    }
 6768}
 6769
 6770// --- emdi12.SoldOutIndicator.value.SetStrptrMaybe
 6771// Convert string to field.
 6772// If the string is invalid, do not modify field and return false.
 6773// In case of success, return true
 6774bool emdi12::value_SetStrptrMaybe(emdi12::SoldOutIndicator& parent, algo::strptr rhs) {
 6775    bool ret = false;
 6776    switch (elems_N(rhs)) {
 6777        case 1: {
 6778            switch (u64(rhs[0])) {
 6779                case '1': {
 6780                    value_SetEnum(parent,emdi12_SoldOutIndicator_1); ret = true; break;
 6781                }
 6782            }
 6783            break;
 6784        }
 6785    }
 6786    return ret;
 6787}
 6788
 6789// --- emdi12.SoldOutIndicator.value.SetStrptr
 6790// Convert string to field.
 6791// If the string is invalid, set numeric value to DFLT
 6792void emdi12::value_SetStrptr(emdi12::SoldOutIndicator& parent, algo::strptr rhs, emdi12_SoldOutIndicatorEnum dflt) {
 6793    if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
 6794}
 6795
 6796// --- emdi12.SoldOutIndicator.value.ReadStrptrMaybe
 6797// Convert string to field. Return success value
 6798bool emdi12::value_ReadStrptrMaybe(emdi12::SoldOutIndicator& parent, algo::strptr rhs) {
 6799    bool retval = false;
 6800    retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
 6801    if (!retval) { // didn't work? try reading as underlying type
 6802        retval = u32_ReadStrptrMaybe(parent.value,rhs);
 6803    }
 6804    return retval;
 6805}
 6806
 6807// --- emdi12.SoldOutIndicator..ReadStrptrMaybe
 6808// Read fields of emdi12::SoldOutIndicator from an ascii string.
 6809// The format of the string is the format of the emdi12::SoldOutIndicator's only field
 6810bool emdi12::SoldOutIndicator_ReadStrptrMaybe(emdi12::SoldOutIndicator &parent, algo::strptr in_str) {
 6811    bool retval = true;
 6812    retval = retval && value_ReadStrptrMaybe(parent, in_str);
 6813    return retval;
 6814}
 6815
 6816// --- emdi12.SoldOutIndicator..Print
 6817// print string representation of ROW to string STR
 6818// cfmt:emdi12.SoldOutIndicator.String  printfmt:Raw
 6819void emdi12::SoldOutIndicator_Print(emdi12::SoldOutIndicator row, algo::cstring& str) {
 6820    emdi12::value_Print(row, str);
 6821}
 6822
 6823// --- emdi12.MDSshGrp.MDOriginType.ReadStrptrMaybe
 6824inline static bool emdi12::MDOriginType_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
 6825    bool retval = true;
 6826    retval = emdi12::MDOriginType_ReadStrptrMaybe(parent.MDOriginType, in_str);
 6827    return retval;
 6828}
 6829
 6830// --- emdi12.MDSshGrp.MDEntryType.ReadStrptrMaybe
 6831inline static bool emdi12::MDEntryType_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
 6832    bool retval = true;
 6833    retval = emdi12::MDEntryType_ReadStrptrMaybe(parent.MDEntryType, in_str);
 6834    return retval;
 6835}
 6836
 6837// --- emdi12.MDSshGrp.MDBookType.ReadStrptrMaybe
 6838inline static bool emdi12::MDBookType_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
 6839    bool retval = true;
 6840    emdi12::MDBookType MDBookType_tmp;
 6841    retval = emdi12::MDBookType_ReadStrptrMaybe(MDBookType_tmp, in_str);
 6842    if (retval) {
 6843        MDBookType_Set(parent, MDBookType_tmp);
 6844    }
 6845    return retval;
 6846}
 6847
 6848// --- emdi12.MDSshGrp.MDSubBookType.ReadStrptrMaybe
 6849inline static bool emdi12::MDSubBookType_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
 6850    bool retval = true;
 6851    emdi12::MDSubBookType MDSubBookType_tmp;
 6852    retval = emdi12::MDSubBookType_ReadStrptrMaybe(MDSubBookType_tmp, in_str);
 6853    if (retval) {
 6854        MDSubBookType_Set(parent, MDSubBookType_tmp);
 6855    }
 6856    return retval;
 6857}
 6858
 6859// --- emdi12.MDSshGrp.TrdType.ReadStrptrMaybe
 6860inline static bool emdi12::TrdType_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
 6861    bool retval = true;
 6862    emdi12::TrdType TrdType_tmp;
 6863    retval = emdi12::TrdType_ReadStrptrMaybe(TrdType_tmp, in_str);
 6864    if (retval) {
 6865        TrdType_Set(parent, TrdType_tmp);
 6866    }
 6867    return retval;
 6868}
 6869
 6870// --- emdi12.MDSshGrp.TradingSessionID.ReadStrptrMaybe
 6871inline static bool emdi12::TradingSessionID_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
 6872    bool retval = true;
 6873    emdi12::TradingSessionID TradingSessionID_tmp;
 6874    retval = emdi12::TradingSessionID_ReadStrptrMaybe(TradingSessionID_tmp, in_str);
 6875    if (retval) {
 6876        TradingSessionID_Set(parent, TradingSessionID_tmp);
 6877    }
 6878    return retval;
 6879}
 6880
 6881// --- emdi12.MDSshGrp.TradingSessionSubID.ReadStrptrMaybe
 6882inline static bool emdi12::TradingSessionSubID_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
 6883    bool retval = true;
 6884    emdi12::TradingSessionSubID TradingSessionSubID_tmp;
 6885    retval = emdi12::TradingSessionSubID_ReadStrptrMaybe(TradingSessionSubID_tmp, in_str);
 6886    if (retval) {
 6887        TradingSessionSubID_Set(parent, TradingSessionSubID_tmp);
 6888    }
 6889    return retval;
 6890}
 6891
 6892// --- emdi12.MDSshGrp.TESTradSesStatus.ReadStrptrMaybe
 6893inline static bool emdi12::TESTradSesStatus_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
 6894    bool retval = true;
 6895    emdi12::TradSesStatus TESTradSesStatus_tmp;
 6896    retval = emdi12::TradSesStatus_ReadStrptrMaybe(TESTradSesStatus_tmp, in_str);
 6897    if (retval) {
 6898        TESTradSesStatus_Set(parent, TESTradSesStatus_tmp);
 6899    }
 6900    return retval;
 6901}
 6902
 6903// --- emdi12.MDSshGrp.SecurityTradingStatus.ReadStrptrMaybe
 6904inline static bool emdi12::SecurityTradingStatus_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
 6905    bool retval = true;
 6906    emdi12::SecurityTradingStatus SecurityTradingStatus_tmp;
 6907    retval = emdi12::SecurityTradingStatus_ReadStrptrMaybe(SecurityTradingStatus_tmp, in_str);
 6908    if (retval) {
 6909        SecurityTradingStatus_Set(parent, SecurityTradingStatus_tmp);
 6910    }
 6911    return retval;
 6912}
 6913
 6914// --- emdi12.MDSshGrp.MarketCondition.ReadStrptrMaybe
 6915inline static bool emdi12::MarketCondition_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
 6916    bool retval = true;
 6917    emdi12::MarketCondition MarketCondition_tmp;
 6918    retval = emdi12::MarketCondition_ReadStrptrMaybe(MarketCondition_tmp, in_str);
 6919    if (retval) {
 6920        MarketCondition_Set(parent, MarketCondition_tmp);
 6921    }
 6922    return retval;
 6923}
 6924
 6925// --- emdi12.MDSshGrp.FastMarketIndicator.ReadStrptrMaybe
 6926inline static bool emdi12::FastMarketIndicator_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
 6927    bool retval = true;
 6928    emdi12::FastMarketIndicator FastMarketIndicator_tmp;
 6929    retval = emdi12::FastMarketIndicator_ReadStrptrMaybe(FastMarketIndicator_tmp, in_str);
 6930    if (retval) {
 6931        FastMarketIndicator_Set(parent, FastMarketIndicator_tmp);
 6932    }
 6933    return retval;
 6934}
 6935
 6936// --- emdi12.MDSshGrp.SecurityTradingEvent.ReadStrptrMaybe
 6937inline static bool emdi12::SecurityTradingEvent_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
 6938    bool retval = true;
 6939    emdi12::SecurityTradingEvent SecurityTradingEvent_tmp;
 6940    retval = emdi12::SecurityTradingEvent_ReadStrptrMaybe(SecurityTradingEvent_tmp, in_str);
 6941    if (retval) {
 6942        SecurityTradingEvent_Set(parent, SecurityTradingEvent_tmp);
 6943    }
 6944    return retval;
 6945}
 6946
 6947// --- emdi12.MDSshGrp.PotentialSecurityTradingEvent.ReadStrptrMaybe
 6948inline static bool emdi12::PotentialSecurityTradingEvent_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
 6949    bool retval = true;
 6950    emdi12::SecurityTradingEvent PotentialSecurityTradingEvent_tmp;
 6951    retval = emdi12::SecurityTradingEvent_ReadStrptrMaybe(PotentialSecurityTradingEvent_tmp, in_str);
 6952    if (retval) {
 6953        PotentialSecurityTradingEvent_Set(parent, PotentialSecurityTradingEvent_tmp);
 6954    }
 6955    return retval;
 6956}
 6957
 6958// --- emdi12.MDSshGrp.SoldOutIndicator.ReadStrptrMaybe
 6959inline static bool emdi12::SoldOutIndicator_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
 6960    bool retval = true;
 6961    emdi12::SoldOutIndicator SoldOutIndicator_tmp;
 6962    retval = emdi12::SoldOutIndicator_ReadStrptrMaybe(SoldOutIndicator_tmp, in_str);
 6963    if (retval) {
 6964        SoldOutIndicator_Set(parent, SoldOutIndicator_tmp);
 6965    }
 6966    return retval;
 6967}
 6968
 6969// --- emdi12.MDSshGrp.HighPx.ReadStrptrMaybe
 6970inline static bool emdi12::HighPx_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
 6971    bool retval = true;
 6972    algo::Decimal HighPx_tmp;
 6973    retval = algo::Decimal_ReadStrptrMaybe(HighPx_tmp, in_str);
 6974    if (retval) {
 6975        HighPx_Set(parent, HighPx_tmp);
 6976    }
 6977    return retval;
 6978}
 6979
 6980// --- emdi12.MDSshGrp.LowPx.ReadStrptrMaybe
 6981inline static bool emdi12::LowPx_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
 6982    bool retval = true;
 6983    algo::Decimal LowPx_tmp;
 6984    retval = algo::Decimal_ReadStrptrMaybe(LowPx_tmp, in_str);
 6985    if (retval) {
 6986        LowPx_Set(parent, LowPx_tmp);
 6987    }
 6988    return retval;
 6989}
 6990
 6991// --- emdi12.MDSshGrp.TradeCondition.ReadStrptrMaybe
 6992inline static bool emdi12::TradeCondition_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
 6993    bool retval = true;
 6994    emdi12::TradeConditionSet TradeCondition_tmp;
 6995    retval = emdi12::TradeConditionSet_ReadStrptrMaybe(TradeCondition_tmp, in_str);
 6996    if (retval) {
 6997        TradeCondition_Set(parent, TradeCondition_tmp);
 6998    }
 6999    return retval;
 7000}
 7001
 7002// --- emdi12.MDSshGrp.MultiLegReportingType.ReadStrptrMaybe
 7003inline static bool emdi12::MultiLegReportingType_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
 7004    bool retval = true;
 7005    emdi12::MultiLegReportingType MultiLegReportingType_tmp;
 7006    retval = emdi12::MultiLegReportingType_ReadStrptrMaybe(MultiLegReportingType_tmp, in_str);
 7007    if (retval) {
 7008        MultiLegReportingType_Set(parent, MultiLegReportingType_tmp);
 7009    }
 7010    return retval;
 7011}
 7012
 7013// --- emdi12.MDSshGrp.MultiLegPriceModel.ReadStrptrMaybe
 7014inline static bool emdi12::MultiLegPriceModel_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
 7015    bool retval = true;
 7016    emdi12::MultiLegPriceModel MultiLegPriceModel_tmp;
 7017    retval = emdi12::MultiLegPriceModel_ReadStrptrMaybe(MultiLegPriceModel_tmp, in_str);
 7018    if (retval) {
 7019        MultiLegPriceModel_Set(parent, MultiLegPriceModel_tmp);
 7020    }
 7021    return retval;
 7022}
 7023
 7024// --- emdi12.MDSshGrp.QuoteCondition.ReadStrptrMaybe
 7025inline static bool emdi12::QuoteCondition_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
 7026    bool retval = true;
 7027    emdi12::QuoteCondition QuoteCondition_tmp;
 7028    retval = emdi12::QuoteCondition_ReadStrptrMaybe(QuoteCondition_tmp, in_str);
 7029    if (retval) {
 7030        QuoteCondition_Set(parent, QuoteCondition_tmp);
 7031    }
 7032    return retval;
 7033}
 7034
 7035// --- emdi12.MDSshGrp.MDEntryPx.ReadStrptrMaybe
 7036inline static bool emdi12::MDEntryPx_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
 7037    bool retval = true;
 7038    algo::Decimal MDEntryPx_tmp;
 7039    retval = algo::Decimal_ReadStrptrMaybe(MDEntryPx_tmp, in_str);
 7040    if (retval) {
 7041        MDEntryPx_Set(parent, MDEntryPx_tmp);
 7042    }
 7043    return retval;
 7044}
 7045
 7046// --- emdi12.MDSshGrp.MDEntrySize.ReadStrptrMaybe
 7047inline static bool emdi12::MDEntrySize_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
 7048    bool retval = true;
 7049    algo::Decimal MDEntrySize_tmp;
 7050    retval = algo::Decimal_ReadStrptrMaybe(MDEntrySize_tmp, in_str);
 7051    if (retval) {
 7052        MDEntrySize_Set(parent, MDEntrySize_tmp);
 7053    }
 7054    return retval;
 7055}
 7056
 7057// --- emdi12.MDSshGrp.NumberOfOrders.ReadStrptrMaybe
 7058inline static bool emdi12::NumberOfOrders_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
 7059    bool retval = true;
 7060    u32 NumberOfOrders_tmp;
 7061    retval = u32_ReadStrptrMaybe(NumberOfOrders_tmp, in_str);
 7062    if (retval) {
 7063        NumberOfOrders_Set(parent, NumberOfOrders_tmp);
 7064    }
 7065    return retval;
 7066}
 7067
 7068// --- emdi12.MDSshGrp.MDPriceLevel.ReadStrptrMaybe
 7069inline static bool emdi12::MDPriceLevel_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
 7070    bool retval = true;
 7071    u32 MDPriceLevel_tmp;
 7072    retval = u32_ReadStrptrMaybe(MDPriceLevel_tmp, in_str);
 7073    if (retval) {
 7074        MDPriceLevel_Set(parent, MDPriceLevel_tmp);
 7075    }
 7076    return retval;
 7077}
 7078
 7079// --- emdi12.MDSshGrp.MDEntryTime.ReadStrptrMaybe
 7080inline static bool emdi12::MDEntryTime_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
 7081    bool retval = true;
 7082    i64 MDEntryTime_tmp;
 7083    retval = i64_ReadStrptrMaybe(MDEntryTime_tmp, in_str);
 7084    if (retval) {
 7085        MDEntryTime_Set(parent, MDEntryTime_tmp);
 7086    }
 7087    return retval;
 7088}
 7089
 7090// --- emdi12.MDSshGrp.NonDisclosedTradeVolume.ReadStrptrMaybe
 7091inline static bool emdi12::NonDisclosedTradeVolume_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
 7092    bool retval = true;
 7093    algo::Decimal NonDisclosedTradeVolume_tmp;
 7094    retval = algo::Decimal_ReadStrptrMaybe(NonDisclosedTradeVolume_tmp, in_str);
 7095    if (retval) {
 7096        NonDisclosedTradeVolume_Set(parent, NonDisclosedTradeVolume_tmp);
 7097    }
 7098    return retval;
 7099}
 7100
 7101// --- emdi12.MDSshGrp.TotalNumOfTrades.ReadStrptrMaybe
 7102inline static bool emdi12::TotalNumOfTrades_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
 7103    bool retval = true;
 7104    u32 TotalNumOfTrades_tmp;
 7105    retval = u32_ReadStrptrMaybe(TotalNumOfTrades_tmp, in_str);
 7106    if (retval) {
 7107        TotalNumOfTrades_Set(parent, TotalNumOfTrades_tmp);
 7108    }
 7109    return retval;
 7110}
 7111
 7112// --- emdi12.MDSshGrp.pmask_bitcurs.Next
 7113// proceed to next item
 7114void emdi12::MDSshGrp_pmask_bitcurs_Next(MDSshGrp_pmask_bitcurs &curs) {
 7115    ++curs.bit;
 7116    int index = curs.bit / 32;
 7117    int offset = curs.bit % 32;
 7118    for (; index < curs.n_elems; ++index, offset = 0) {
 7119        u64 rest = curs.elems[index] >> offset;
 7120        if (rest) {
 7121            offset += algo::u64_BitScanForward(rest);
 7122            break;
 7123        }
 7124    }
 7125    curs.bit = index * 32 + offset;
 7126}
 7127
 7128// --- emdi12.MDSshGrp..ReadFieldMaybe
 7129bool emdi12::MDSshGrp_ReadFieldMaybe(emdi12::MDSshGrp& parent, algo::strptr field, algo::strptr strval) {
 7130    bool retval = true;
 7131    emdi12::FieldId field_id;
 7132    (void)value_SetStrptrMaybe(field_id,field);
 7133    switch(field_id) {
 7134        case emdi12_FieldId_pmask: {
 7135            retval = false;
 7136            break;
 7137        }
 7138        case emdi12_FieldId_MDOriginType: {
 7139            retval = MDOriginType_ReadStrptrMaybe(parent, strval);
 7140            break;
 7141        }
 7142        case emdi12_FieldId_MDEntryType: {
 7143            retval = MDEntryType_ReadStrptrMaybe(parent, strval);
 7144            break;
 7145        }
 7146        case emdi12_FieldId_MDBookType: {
 7147            retval = MDBookType_ReadStrptrMaybe(parent, strval);
 7148            if (retval) {
 7149                pmask_qSetBit(parent, 3);
 7150            }
 7151            break;
 7152        }
 7153        case emdi12_FieldId_MDSubBookType: {
 7154            retval = MDSubBookType_ReadStrptrMaybe(parent, strval);
 7155            if (retval) {
 7156                pmask_qSetBit(parent, 8);
 7157            }
 7158            break;
 7159        }
 7160        case emdi12_FieldId_TrdType: {
 7161            retval = TrdType_ReadStrptrMaybe(parent, strval);
 7162            if (retval) {
 7163                pmask_qSetBit(parent, 24);
 7164            }
 7165            break;
 7166        }
 7167        case emdi12_FieldId_TradingSessionID: {
 7168            retval = TradingSessionID_ReadStrptrMaybe(parent, strval);
 7169            if (retval) {
 7170                pmask_qSetBit(parent, 22);
 7171            }
 7172            break;
 7173        }
 7174        case emdi12_FieldId_TradingSessionSubID: {
 7175            retval = TradingSessionSubID_ReadStrptrMaybe(parent, strval);
 7176            if (retval) {
 7177                pmask_qSetBit(parent, 23);
 7178            }
 7179            break;
 7180        }
 7181        case emdi12_FieldId_TESTradSesStatus: {
 7182            retval = TESTradSesStatus_ReadStrptrMaybe(parent, strval);
 7183            if (retval) {
 7184                pmask_qSetBit(parent, 19);
 7185            }
 7186            break;
 7187        }
 7188        case emdi12_FieldId_SecurityTradingStatus: {
 7189            retval = SecurityTradingStatus_ReadStrptrMaybe(parent, strval);
 7190            if (retval) {
 7191                pmask_qSetBit(parent, 17);
 7192            }
 7193            break;
 7194        }
 7195        case emdi12_FieldId_MarketCondition: {
 7196            retval = MarketCondition_ReadStrptrMaybe(parent, strval);
 7197            if (retval) {
 7198                pmask_qSetBit(parent, 9);
 7199            }
 7200            break;
 7201        }
 7202        case emdi12_FieldId_FastMarketIndicator: {
 7203            retval = FastMarketIndicator_ReadStrptrMaybe(parent, strval);
 7204            if (retval) {
 7205                pmask_qSetBit(parent, 0);
 7206            }
 7207            break;
 7208        }
 7209        case emdi12_FieldId_SecurityTradingEvent: {
 7210            retval = SecurityTradingEvent_ReadStrptrMaybe(parent, strval);
 7211            if (retval) {
 7212                pmask_qSetBit(parent, 16);
 7213            }
 7214            break;
 7215        }
 7216        case emdi12_FieldId_PotentialSecurityTradingEvent: {
 7217            retval = PotentialSecurityTradingEvent_ReadStrptrMaybe(parent, strval);
 7218            if (retval) {
 7219                pmask_qSetBit(parent, 14);
 7220            }
 7221            break;
 7222        }
 7223        case emdi12_FieldId_SoldOutIndicator: {
 7224            retval = SoldOutIndicator_ReadStrptrMaybe(parent, strval);
 7225            if (retval) {
 7226                pmask_qSetBit(parent, 18);
 7227            }
 7228            break;
 7229        }
 7230        case emdi12_FieldId_HighPx: {
 7231            retval = HighPx_ReadStrptrMaybe(parent, strval);
 7232            if (retval) {
 7233                pmask_qSetBit(parent, 1);
 7234            }
 7235            break;
 7236        }
 7237        case emdi12_FieldId_LowPx: {
 7238            retval = LowPx_ReadStrptrMaybe(parent, strval);
 7239            if (retval) {
 7240                pmask_qSetBit(parent, 2);
 7241            }
 7242            break;
 7243        }
 7244        case emdi12_FieldId_TradeCondition: {
 7245            retval = TradeCondition_ReadStrptrMaybe(parent, strval);
 7246            if (retval) {
 7247                pmask_qSetBit(parent, 21);
 7248            }
 7249            break;
 7250        }
 7251        case emdi12_FieldId_MultiLegReportingType: {
 7252            retval = MultiLegReportingType_ReadStrptrMaybe(parent, strval);
 7253            if (retval) {
 7254                pmask_qSetBit(parent, 11);
 7255            }
 7256            break;
 7257        }
 7258        case emdi12_FieldId_MultiLegPriceModel: {
 7259            retval = MultiLegPriceModel_ReadStrptrMaybe(parent, strval);
 7260            if (retval) {
 7261                pmask_qSetBit(parent, 10);
 7262            }
 7263            break;
 7264        }
 7265        case emdi12_FieldId_QuoteCondition: {
 7266            retval = QuoteCondition_ReadStrptrMaybe(parent, strval);
 7267            if (retval) {
 7268                pmask_qSetBit(parent, 15);
 7269            }
 7270            break;
 7271        }
 7272        case emdi12_FieldId_MDEntryPx: {
 7273            retval = MDEntryPx_ReadStrptrMaybe(parent, strval);
 7274            if (retval) {
 7275                pmask_qSetBit(parent, 4);
 7276            }
 7277            break;
 7278        }
 7279        case emdi12_FieldId_MDEntrySize: {
 7280            retval = MDEntrySize_ReadStrptrMaybe(parent, strval);
 7281            if (retval) {
 7282                pmask_qSetBit(parent, 5);
 7283            }
 7284            break;
 7285        }
 7286        case emdi12_FieldId_NumberOfOrders: {
 7287            retval = NumberOfOrders_ReadStrptrMaybe(parent, strval);
 7288            if (retval) {
 7289                pmask_qSetBit(parent, 13);
 7290            }
 7291            break;
 7292        }
 7293        case emdi12_FieldId_MDPriceLevel: {
 7294            retval = MDPriceLevel_ReadStrptrMaybe(parent, strval);
 7295            if (retval) {
 7296                pmask_qSetBit(parent, 7);
 7297            }
 7298            break;
 7299        }
 7300        case emdi12_FieldId_MDEntryTime: {
 7301            retval = MDEntryTime_ReadStrptrMaybe(parent, strval);
 7302            if (retval) {
 7303                pmask_qSetBit(parent, 6);
 7304            }
 7305            break;
 7306        }
 7307        case emdi12_FieldId_NonDisclosedTradeVolume: {
 7308            retval = NonDisclosedTradeVolume_ReadStrptrMaybe(parent, strval);
 7309            if (retval) {
 7310                pmask_qSetBit(parent, 12);
 7311            }
 7312            break;
 7313        }
 7314        case emdi12_FieldId_TotalNumOfTrades: {
 7315            retval = TotalNumOfTrades_ReadStrptrMaybe(parent, strval);
 7316            if (retval) {
 7317                pmask_qSetBit(parent, 20);
 7318            }
 7319            break;
 7320        }
 7321        default: break;
 7322    }
 7323    if (!retval) {
 7324        algo_lib::AppendErrtext("attr",field);
 7325    }
 7326    return retval;
 7327}
 7328
 7329// --- emdi12.MDSshGrp..ReadStrptrMaybe
 7330// Read fields of emdi12::MDSshGrp from an ascii string.
 7331// The format of the string is an ssim Tuple
 7332bool emdi12::MDSshGrp_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
 7333    bool retval = true;
 7334    retval = algo::StripTypeTag(in_str, "emdi12.MDSshGrp");
 7335    ind_beg(algo::Attr_curs, attr, in_str) {
 7336        retval = retval && MDSshGrp_ReadFieldMaybe(parent, attr.name, attr.value);
 7337    }ind_end;
 7338    return retval;
 7339}
 7340
 7341// --- emdi12.MDSshGrp..Init
 7342// Set all fields to initial values.
 7343void emdi12::MDSshGrp_Init(emdi12::MDSshGrp& MDSshGrp) {
 7344    MDSshGrp.pmask = u32(0);
 7345    MDSshGrp.MDOriginType = emdi12_MDOriginTypeEnum(0);
 7346    MDSshGrp.HighPx = algo::Decimal(algo::Decimal(0,0));
 7347    MDSshGrp.LowPx = algo::Decimal(algo::Decimal(0,0));
 7348    MDSshGrp.MDEntryPx = algo::Decimal(algo::Decimal(0,0));
 7349    MDSshGrp.MDEntrySize = algo::Decimal(algo::Decimal(0,0));
 7350    MDSshGrp.NumberOfOrders = u32(0);
 7351    MDSshGrp.MDPriceLevel = u32(0);
 7352    MDSshGrp.MDEntryTime = i64(0);
 7353    MDSshGrp.NonDisclosedTradeVolume = algo::Decimal(algo::Decimal(0,0));
 7354    MDSshGrp.TotalNumOfTrades = u32(0);
 7355}
 7356
 7357// --- emdi12.MDSshGrp..Print
 7358// print string representation of ROW to string STR
 7359// cfmt:emdi12.MDSshGrp.String  printfmt:Tuple
 7360void emdi12::MDSshGrp_Print(emdi12::MDSshGrp& row, algo::cstring& str) {
 7361    algo::tempstr temp;
 7362    str << "emdi12.MDSshGrp";
 7363
 7364    emdi12::MDOriginType_Print(row.MDOriginType, temp);
 7365    PrintAttrSpaceReset(str,"MDOriginType", temp);
 7366
 7367    emdi12::MDEntryType_Print(row.MDEntryType, temp);
 7368    PrintAttrSpaceReset(str,"MDEntryType", temp);
 7369
 7370    if (MDBookType_PresentQ(row)) {
 7371        emdi12::MDBookType_Print(row.MDBookType, temp);
 7372        PrintAttrSpaceReset(str,"MDBookType", temp);
 7373    }
 7374
 7375    if (MDSubBookType_PresentQ(row)) {
 7376        emdi12::MDSubBookType_Print(row.MDSubBookType, temp);
 7377        PrintAttrSpaceReset(str,"MDSubBookType", temp);
 7378    }
 7379
 7380    if (TrdType_PresentQ(row)) {
 7381        emdi12::TrdType_Print(row.TrdType, temp);
 7382        PrintAttrSpaceReset(str,"TrdType", temp);
 7383    }
 7384
 7385    if (TradingSessionID_PresentQ(row)) {
 7386        emdi12::TradingSessionID_Print(row.TradingSessionID, temp);
 7387        PrintAttrSpaceReset(str,"TradingSessionID", temp);
 7388    }
 7389
 7390    if (TradingSessionSubID_PresentQ(row)) {
 7391        emdi12::TradingSessionSubID_Print(row.TradingSessionSubID, temp);
 7392        PrintAttrSpaceReset(str,"TradingSessionSubID", temp);
 7393    }
 7394
 7395    if (TESTradSesStatus_PresentQ(row)) {
 7396        emdi12::TradSesStatus_Print(row.TESTradSesStatus, temp);
 7397        PrintAttrSpaceReset(str,"TESTradSesStatus", temp);
 7398    }
 7399
 7400    if (SecurityTradingStatus_PresentQ(row)) {
 7401        emdi12::SecurityTradingStatus_Print(row.SecurityTradingStatus, temp);
 7402        PrintAttrSpaceReset(str,"SecurityTradingStatus", temp);
 7403    }
 7404
 7405    if (MarketCondition_PresentQ(row)) {
 7406        emdi12::MarketCondition_Print(row.MarketCondition, temp);
 7407        PrintAttrSpaceReset(str,"MarketCondition", temp);
 7408    }
 7409
 7410    if (FastMarketIndicator_PresentQ(row)) {
 7411        emdi12::FastMarketIndicator_Print(row.FastMarketIndicator, temp);
 7412        PrintAttrSpaceReset(str,"FastMarketIndicator", temp);
 7413    }
 7414
 7415    if (SecurityTradingEvent_PresentQ(row)) {
 7416        emdi12::SecurityTradingEvent_Print(row.SecurityTradingEvent, temp);
 7417        PrintAttrSpaceReset(str,"SecurityTradingEvent", temp);
 7418    }
 7419
 7420    if (PotentialSecurityTradingEvent_PresentQ(row)) {
 7421        emdi12::SecurityTradingEvent_Print(row.PotentialSecurityTradingEvent, temp);
 7422        PrintAttrSpaceReset(str,"PotentialSecurityTradingEvent", temp);
 7423    }
 7424
 7425    if (SoldOutIndicator_PresentQ(row)) {
 7426        emdi12::SoldOutIndicator_Print(row.SoldOutIndicator, temp);
 7427        PrintAttrSpaceReset(str,"SoldOutIndicator", temp);
 7428    }
 7429
 7430    if (HighPx_PresentQ(row)) {
 7431        algo::Decimal_Print(row.HighPx, temp);
 7432        PrintAttrSpaceReset(str,"HighPx", temp);
 7433    }
 7434
 7435    if (LowPx_PresentQ(row)) {
 7436        algo::Decimal_Print(row.LowPx, temp);
 7437        PrintAttrSpaceReset(str,"LowPx", temp);
 7438    }
 7439
 7440    if (TradeCondition_PresentQ(row)) {
 7441        emdi12::TradeConditionSet_Print(row.TradeCondition, temp);
 7442        PrintAttrSpaceReset(str,"TradeCondition", temp);
 7443    }
 7444
 7445    if (MultiLegReportingType_PresentQ(row)) {
 7446        emdi12::MultiLegReportingType_Print(row.MultiLegReportingType, temp);
 7447        PrintAttrSpaceReset(str,"MultiLegReportingType", temp);
 7448    }
 7449
 7450    if (MultiLegPriceModel_PresentQ(row)) {
 7451        emdi12::MultiLegPriceModel_Print(row.MultiLegPriceModel, temp);
 7452        PrintAttrSpaceReset(str,"MultiLegPriceModel", temp);
 7453    }
 7454
 7455    if (QuoteCondition_PresentQ(row)) {
 7456        emdi12::QuoteCondition_Print(row.QuoteCondition, temp);
 7457        PrintAttrSpaceReset(str,"QuoteCondition", temp);
 7458    }
 7459
 7460    if (MDEntryPx_PresentQ(row)) {
 7461        algo::Decimal_Print(row.MDEntryPx, temp);
 7462        PrintAttrSpaceReset(str,"MDEntryPx", temp);
 7463    }
 7464
 7465    if (MDEntrySize_PresentQ(row)) {
 7466        algo::Decimal_Print(row.MDEntrySize, temp);
 7467        PrintAttrSpaceReset(str,"MDEntrySize", temp);
 7468    }
 7469
 7470    if (NumberOfOrders_PresentQ(row)) {
 7471        u32_Print(row.NumberOfOrders, temp);
 7472        PrintAttrSpaceReset(str,"NumberOfOrders", temp);
 7473    }
 7474
 7475    if (MDPriceLevel_PresentQ(row)) {
 7476        u32_Print(row.MDPriceLevel, temp);
 7477        PrintAttrSpaceReset(str,"MDPriceLevel", temp);
 7478    }
 7479
 7480    if (MDEntryTime_PresentQ(row)) {
 7481        i64_Print(row.MDEntryTime, temp);
 7482        PrintAttrSpaceReset(str,"MDEntryTime", temp);
 7483    }
 7484
 7485    if (NonDisclosedTradeVolume_PresentQ(row)) {
 7486        algo::Decimal_Print(row.NonDisclosedTradeVolume, temp);
 7487        PrintAttrSpaceReset(str,"NonDisclosedTradeVolume", temp);
 7488    }
 7489
 7490    if (TotalNumOfTrades_PresentQ(row)) {
 7491        u32_Print(row.TotalNumOfTrades, temp);
 7492        PrintAttrSpaceReset(str,"TotalNumOfTrades", temp);
 7493    }
 7494}
 7495
 7496// --- emdi12.MDSshGrp..FastEncode
 7497void emdi12::MDSshGrp_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::MDSshGrp& parent) {
 7498    int index = ary_N(buf);
 7499    u64 pmap(0);
 7500    // MDOriginType type default mandatory
 7501    if (parent.MDOriginType.value != 0) {
 7502        lib_fast::EncodeUnsigned(buf,parent.MDOriginType.value,false);
 7503        lib_fast::SetPmapBit(pmap,0);
 7504    }
 7505    // MDEntryType type copy mandatory
 7506    if (!MDEntryType_AssignedQ(state) || parent.MDEntryType.value != state.MDEntryType.value) {
 7507        lib_fast::EncodeUnsigned(buf,parent.MDEntryType.value,false);
 7508        lib_fast::SetPmapBit(pmap,1);
 7509    }
 7510    state.MDEntryType.value = parent.MDEntryType.value;
 7511    MDEntryType_SetAssigned(state);
 7512    // MDBookType type copy optional
 7513    if (MDBookType_PresentQ(parent)) {
 7514        if (!MDBookType_AssignedQ(state) || !MDBookType_PresentQ(state) ||  parent.MDBookType.value != state.MDBookType.value ) {
 7515            lib_fast::EncodeUnsigned(buf,parent.MDBookType.value,true);
 7516            lib_fast::SetPmapBit(pmap,2);
 7517        }
 7518    } else {
 7519        if (MDBookType_AssignedQ(state)) {
 7520            lib_fast::EncodeNull(buf);
 7521            lib_fast::SetPmapBit(pmap,2);
 7522        }
 7523    }
 7524    state.MDBookType.value = parent.MDBookType.value;
 7525    present_qSetBitVal(state,MDBookType_Present_GetBit(state),MDBookType_PresentQ(parent));
 7526    MDBookType_SetAssigned(state);
 7527    // MDSubBookType type copy optional
 7528    if (MDSubBookType_PresentQ(parent)) {
 7529        if (!MDSubBookType_AssignedQ(state) || !MDSubBookType_PresentQ(state) ||  parent.MDSubBookType.value != state.MDSubBookType.value ) {
 7530            lib_fast::EncodeUnsigned(buf,parent.MDSubBookType.value,true);
 7531            lib_fast::SetPmapBit(pmap,3);
 7532        }
 7533    } else {
 7534        if (MDSubBookType_AssignedQ(state)) {
 7535            lib_fast::EncodeNull(buf);
 7536            lib_fast::SetPmapBit(pmap,3);
 7537        }
 7538    }
 7539    state.MDSubBookType.value = parent.MDSubBookType.value;
 7540    present_qSetBitVal(state,MDSubBookType_Present_GetBit(state),MDSubBookType_PresentQ(parent));
 7541    MDSubBookType_SetAssigned(state);
 7542    // TrdType type default optional
 7543    if (TrdType_PresentQ(parent)) {
 7544        lib_fast::EncodeUnsigned(buf,parent.TrdType.value,true);
 7545        lib_fast::SetPmapBit(pmap,4);
 7546    }
 7547    // TradingSessionID type default optional
 7548    if (TradingSessionID_PresentQ(parent)) {
 7549        lib_fast::EncodeUnsigned(buf,parent.TradingSessionID.value,true);
 7550        lib_fast::SetPmapBit(pmap,5);
 7551    }
 7552    // TradingSessionSubID type default optional
 7553    if (TradingSessionSubID_PresentQ(parent)) {
 7554        lib_fast::EncodeUnsigned(buf,parent.TradingSessionSubID.value,true);
 7555        lib_fast::SetPmapBit(pmap,6);
 7556    }
 7557    // TESTradSesStatus type default optional
 7558    if (TESTradSesStatus_PresentQ(parent)) {
 7559        lib_fast::EncodeUnsigned(buf,parent.TESTradSesStatus.value,true);
 7560        lib_fast::SetPmapBit(pmap,7);
 7561    }
 7562    // SecurityTradingStatus type default optional
 7563    if (SecurityTradingStatus_PresentQ(parent)) {
 7564        lib_fast::EncodeUnsigned(buf,parent.SecurityTradingStatus.value,true);
 7565        lib_fast::SetPmapBit(pmap,8);
 7566    }
 7567    // MarketCondition type default optional
 7568    if (MarketCondition_PresentQ(parent)) {
 7569        lib_fast::EncodeUnsigned(buf,parent.MarketCondition.value,true);
 7570        lib_fast::SetPmapBit(pmap,9);
 7571    }
 7572    // FastMarketIndicator type default optional
 7573    if (FastMarketIndicator_PresentQ(parent)) {
 7574        lib_fast::EncodeUnsigned(buf,parent.FastMarketIndicator.value,true);
 7575        lib_fast::SetPmapBit(pmap,10);
 7576    }
 7577    // SecurityTradingEvent type default optional
 7578    if (SecurityTradingEvent_PresentQ(parent)) {
 7579        lib_fast::EncodeUnsigned(buf,parent.SecurityTradingEvent.value,true);
 7580        lib_fast::SetPmapBit(pmap,11);
 7581    }
 7582    // PotentialSecurityTradingEvent type default optional
 7583    if (PotentialSecurityTradingEvent_PresentQ(parent)) {
 7584        lib_fast::EncodeUnsigned(buf,parent.PotentialSecurityTradingEvent.value,true);
 7585        lib_fast::SetPmapBit(pmap,12);
 7586    }
 7587    // SoldOutIndicator type default optional
 7588    if (SoldOutIndicator_PresentQ(parent)) {
 7589        lib_fast::EncodeUnsigned(buf,parent.SoldOutIndicator.value,true);
 7590        lib_fast::SetPmapBit(pmap,13);
 7591    }
 7592    // HighPx scaled delta optional
 7593    if (!HighPx_AssignedQ(state)) {
 7594        HighPx_SetAssigned(state);
 7595        present_qSetBitVal(state,HighPx_Present_GetBit(state),HighPx_PresentQ(parent));
 7596        state.HighPx = algo::Decimal(0,0);
 7597    }
 7598    if (HighPx_PresentQ(parent)) {
 7599        if (!HighPx_PresentQ(state)) {
 7600            state.HighPx = algo::Decimal(0,0);
 7601        }
 7602        lib_fast::EncodeDeltaScaled(buf,state.HighPx,parent.HighPx,true);
 7603    } else {
 7604        lib_fast::EncodeNull(buf);
 7605    }
 7606    state.HighPx = parent.HighPx;
 7607    present_qSetBitVal(state,HighPx_Present_GetBit(state),HighPx_PresentQ(parent));
 7608    // LowPx scaled delta optional
 7609    if (!LowPx_AssignedQ(state)) {
 7610        LowPx_SetAssigned(state);
 7611        present_qSetBitVal(state,LowPx_Present_GetBit(state),LowPx_PresentQ(parent));
 7612        state.LowPx = algo::Decimal(0,0);
 7613    }
 7614    if (LowPx_PresentQ(parent)) {
 7615        if (!LowPx_PresentQ(state)) {
 7616            state.LowPx = algo::Decimal(0,0);
 7617        }
 7618        lib_fast::EncodeDeltaScaled(buf,state.LowPx,parent.LowPx,true);
 7619    } else {
 7620        lib_fast::EncodeNull(buf);
 7621    }
 7622    state.LowPx = parent.LowPx;
 7623    present_qSetBitVal(state,LowPx_Present_GetBit(state),LowPx_PresentQ(parent));
 7624    // TradeCondition type default optional
 7625    if (TradeCondition_PresentQ(parent)) {
 7626        lib_fast::EncodeUnsigned(buf,parent.TradeCondition.value,true);
 7627        lib_fast::SetPmapBit(pmap,14);
 7628    }
 7629    // MultiLegReportingType type default optional
 7630    if (MultiLegReportingType_PresentQ(parent)) {
 7631        lib_fast::EncodeUnsigned(buf,parent.MultiLegReportingType.value,true);
 7632        lib_fast::SetPmapBit(pmap,15);
 7633    }
 7634    // MultiLegPriceModel type default optional
 7635    if (MultiLegPriceModel_PresentQ(parent)) {
 7636        lib_fast::EncodeUnsigned(buf,parent.MultiLegPriceModel.value,true);
 7637        lib_fast::SetPmapBit(pmap,16);
 7638    }
 7639    // QuoteCondition type copy optional
 7640    if (QuoteCondition_PresentQ(parent)) {
 7641        if (!QuoteCondition_AssignedQ(state) || !QuoteCondition_PresentQ(state) ||  parent.QuoteCondition.value != state.QuoteCondition.value ) {
 7642            lib_fast::EncodeUnsigned(buf,parent.QuoteCondition.value,true);
 7643            lib_fast::SetPmapBit(pmap,17);
 7644        }
 7645    } else {
 7646        if (QuoteCondition_AssignedQ(state)) {
 7647            lib_fast::EncodeNull(buf);
 7648            lib_fast::SetPmapBit(pmap,17);
 7649        }
 7650    }
 7651    state.QuoteCondition.value = parent.QuoteCondition.value;
 7652    present_qSetBitVal(state,QuoteCondition_Present_GetBit(state),QuoteCondition_PresentQ(parent));
 7653    QuoteCondition_SetAssigned(state);
 7654    // MDEntryPx scaled delta optional
 7655    if (!MDEntryPx_AssignedQ(state)) {
 7656        MDEntryPx_SetAssigned(state);
 7657        present_qSetBitVal(state,MDEntryPx_Present_GetBit(state),MDEntryPx_PresentQ(parent));
 7658        state.MDEntryPx = algo::Decimal(0,0);
 7659    }
 7660    if (MDEntryPx_PresentQ(parent)) {
 7661        if (!MDEntryPx_PresentQ(state)) {
 7662            state.MDEntryPx = algo::Decimal(0,0);
 7663        }
 7664        lib_fast::EncodeDeltaScaled(buf,state.MDEntryPx,parent.MDEntryPx,true);
 7665    } else {
 7666        lib_fast::EncodeNull(buf);
 7667    }
 7668    state.MDEntryPx = parent.MDEntryPx;
 7669    present_qSetBitVal(state,MDEntryPx_Present_GetBit(state),MDEntryPx_PresentQ(parent));
 7670    // MDEntrySize scaled delta optional
 7671    if (!MDEntrySize_AssignedQ(state)) {
 7672        MDEntrySize_SetAssigned(state);
 7673        present_qSetBitVal(state,MDEntrySize_Present_GetBit(state),MDEntrySize_PresentQ(parent));
 7674        state.MDEntrySize = algo::Decimal(0,0);
 7675    }
 7676    if (MDEntrySize_PresentQ(parent)) {
 7677        if (!MDEntrySize_PresentQ(state)) {
 7678            state.MDEntrySize = algo::Decimal(0,0);
 7679        }
 7680        lib_fast::EncodeDeltaScaled(buf,state.MDEntrySize,parent.MDEntrySize,true);
 7681    } else {
 7682        lib_fast::EncodeNull(buf);
 7683    }
 7684    state.MDEntrySize = parent.MDEntrySize;
 7685    present_qSetBitVal(state,MDEntrySize_Present_GetBit(state),MDEntrySize_PresentQ(parent));
 7686    // NumberOfOrders unsigned delta optional
 7687    if (!NumberOfOrders_AssignedQ(state)) {
 7688        NumberOfOrders_SetAssigned(state);
 7689        present_qSetBitVal(state,NumberOfOrders_Present_GetBit(state),NumberOfOrders_PresentQ(parent));
 7690        state.NumberOfOrders = 0;
 7691    }
 7692    if (NumberOfOrders_PresentQ(parent)) {
 7693        if (!NumberOfOrders_PresentQ(state)) {
 7694            state.NumberOfOrders = 0;
 7695        }
 7696        lib_fast::EncodeDeltaUnsigned(buf,state.NumberOfOrders,parent.NumberOfOrders,true);
 7697    } else {
 7698        lib_fast::EncodeNull(buf);
 7699    }
 7700    state.NumberOfOrders = parent.NumberOfOrders;
 7701    present_qSetBitVal(state,NumberOfOrders_Present_GetBit(state),NumberOfOrders_PresentQ(parent));
 7702    // MDPriceLevel unsigned increment optional
 7703    if (MDPriceLevel_PresentQ(parent)) {
 7704        if (MDPriceLevel_AssignedQ(state)) {
 7705            if (!MDPriceLevel_PresentQ(state) || parent.MDPriceLevel != state.MDPriceLevel + 1) {
 7706                lib_fast::EncodeUnsigned(buf,parent.MDPriceLevel,true);
 7707                lib_fast::SetPmapBit(pmap,18);
 7708            }
 7709        } else {
 7710            lib_fast::EncodeUnsigned(buf,parent.MDPriceLevel,true);
 7711            lib_fast::SetPmapBit(pmap,18);
 7712        }
 7713    } else {
 7714        if (!MDPriceLevel_AssignedQ(state) || MDPriceLevel_PresentQ(state)) {
 7715            lib_fast::EncodeNull(buf);
 7716            lib_fast::SetPmapBit(pmap,18);
 7717        }
 7718    }
 7719    state.MDPriceLevel = parent.MDPriceLevel;
 7720    present_qSetBitVal(state,MDPriceLevel_Present_GetBit(state),MDPriceLevel_PresentQ(parent));
 7721    MDPriceLevel_SetAssigned(state);
 7722    // MDEntryTime signed delta optional
 7723    if (!MDEntryTime_AssignedQ(state)) {
 7724        MDEntryTime_SetAssigned(state);
 7725        present_qSetBitVal(state,MDEntryTime_Present_GetBit(state),MDEntryTime_PresentQ(parent));
 7726        state.MDEntryTime = 0;
 7727    }
 7728    if (MDEntryTime_PresentQ(parent)) {
 7729        if (!MDEntryTime_PresentQ(state)) {
 7730            state.MDEntryTime = 0;
 7731        }
 7732        lib_fast::EncodeDeltaSigned(buf,state.MDEntryTime,parent.MDEntryTime,true);
 7733    } else {
 7734        lib_fast::EncodeNull(buf);
 7735    }
 7736    state.MDEntryTime = parent.MDEntryTime;
 7737    present_qSetBitVal(state,MDEntryTime_Present_GetBit(state),MDEntryTime_PresentQ(parent));
 7738    // NonDisclosedTradeVolume scaled default optional
 7739    if (NonDisclosedTradeVolume_PresentQ(parent)) {
 7740        if (parent.NonDisclosedTradeVolume != algo::Decimal(0,0)) {
 7741            lib_fast::EncodeScaled(buf,parent.NonDisclosedTradeVolume,true);
 7742            lib_fast::SetPmapBit(pmap,19);
 7743        }
 7744    } else {
 7745        lib_fast::EncodeNull(buf);
 7746        lib_fast::SetPmapBit(pmap,19);
 7747    }
 7748    // TotalNumOfTrades unsigned default optional
 7749    if (TotalNumOfTrades_PresentQ(parent)) {
 7750        lib_fast::EncodeUnsigned(buf,parent.TotalNumOfTrades,true);
 7751        lib_fast::SetPmapBit(pmap,20);
 7752    }
 7753    lib_fast::InsertPmap(buf,index,pmap);
 7754}
 7755
 7756// --- emdi12.MDSshGrp..FastDecode
 7757bool emdi12::MDSshGrp_FastDecode(algo::memptr& from, FastState& state, emdi12::MDSshGrp& parent) {
 7758    bool ok = true;
 7759    u64 pmap;
 7760    ok = lib_fast::DecodePmap(from,pmap);
 7761    if (!ok) {
 7762        state.error << "emdi12.MDSshGrp: bad pmap" << eol;
 7763    }
 7764    // MDOriginType type default mandatory
 7765    if (ok) {
 7766        bool prs = lib_fast::GetPmapBit(pmap,0);
 7767        if (prs) {
 7768            ok = lib_fast::DecodeUnsigned(from,parent.MDOriginType.value,false);
 7769            if (!ok) {
 7770                state.error << "emdi12.MDSshGrp.MDOriginType: bad Unsigned" << eol;
 7771            }
 7772        } else {
 7773            parent.MDOriginType.value = 0;
 7774        }
 7775    }
 7776    // MDEntryType type copy mandatory
 7777    if (ok) {
 7778        bool prs = lib_fast::GetPmapBit(pmap,1);
 7779        if (prs) {
 7780            ok = lib_fast::DecodeUnsigned(from,parent.MDEntryType.value,false);
 7781            if (!ok) {
 7782                state.error << "emdi12.MDSshGrp.MDEntryType: bad Unsigned" << eol;
 7783            }
 7784        } else if (MDEntryType_AssignedQ(state)) {
 7785            parent.MDEntryType.value = state.MDEntryType.value;
 7786        } else {
 7787            ok = false;
 7788            state.error << "emdi12.MDSshGrp.MDEntryType: copy operator: previous value unassigned" << eol;
 7789        }
 7790        MDEntryType_SetAssigned(state);
 7791        state.MDEntryType.value = parent.MDEntryType.value;
 7792    }
 7793    // MDBookType type copy optional
 7794    if (ok) {
 7795        bool prs = lib_fast::GetPmapBit(pmap,2);
 7796        if (prs) {
 7797            prs = !lib_fast::DecodeNull(from);
 7798            if (prs) {
 7799                ok = lib_fast::DecodeUnsigned(from,parent.MDBookType.value,true);
 7800                if (!ok) {
 7801                    state.error << "emdi12.MDSshGrp.MDBookType: bad Unsigned" << eol;
 7802                }
 7803            }
 7804        } else if (MDBookType_AssignedQ(state)) {
 7805            parent.MDBookType.value = state.MDBookType.value;
 7806            prs = MDBookType_PresentQ(state);
 7807        } else {
 7808            prs = false;
 7809        }
 7810        pmask_qSetBitVal(parent,MDBookType_Present_GetBit(parent),prs);
 7811        MDBookType_SetAssigned(state);
 7812        present_qSetBitVal(state,MDBookType_Present_GetBit(state),prs);
 7813        state.MDBookType.value = parent.MDBookType.value;
 7814    }
 7815    // MDSubBookType type copy optional
 7816    if (ok) {
 7817        bool prs = lib_fast::GetPmapBit(pmap,3);
 7818        if (prs) {
 7819            prs = !lib_fast::DecodeNull(from);
 7820            if (prs) {
 7821                ok = lib_fast::DecodeUnsigned(from,parent.MDSubBookType.value,true);
 7822                if (!ok) {
 7823                    state.error << "emdi12.MDSshGrp.MDSubBookType: bad Unsigned" << eol;
 7824                }
 7825            }
 7826        } else if (MDSubBookType_AssignedQ(state)) {
 7827            parent.MDSubBookType.value = state.MDSubBookType.value;
 7828            prs = MDSubBookType_PresentQ(state);
 7829        } else {
 7830            prs = false;
 7831        }
 7832        pmask_qSetBitVal(parent,MDSubBookType_Present_GetBit(parent),prs);
 7833        MDSubBookType_SetAssigned(state);
 7834        present_qSetBitVal(state,MDSubBookType_Present_GetBit(state),prs);
 7835        state.MDSubBookType.value = parent.MDSubBookType.value;
 7836    }
 7837    // TrdType type default optional
 7838    if (ok) {
 7839        bool prs = lib_fast::GetPmapBit(pmap,4);
 7840        if (prs) {
 7841            prs = !lib_fast::DecodeNull(from);
 7842            if (prs) {
 7843                ok = lib_fast::DecodeUnsigned(from,parent.TrdType.value,true);
 7844                if (!ok) {
 7845                    state.error << "emdi12.MDSshGrp.TrdType: bad Unsigned" << eol;
 7846                }
 7847            }
 7848        } else {
 7849        }
 7850        pmask_qSetBitVal(parent,TrdType_Present_GetBit(parent),prs);
 7851    }
 7852    // TradingSessionID type default optional
 7853    if (ok) {
 7854        bool prs = lib_fast::GetPmapBit(pmap,5);
 7855        if (prs) {
 7856            prs = !lib_fast::DecodeNull(from);
 7857            if (prs) {
 7858                ok = lib_fast::DecodeUnsigned(from,parent.TradingSessionID.value,true);
 7859                if (!ok) {
 7860                    state.error << "emdi12.MDSshGrp.TradingSessionID: bad Unsigned" << eol;
 7861                }
 7862            }
 7863        } else {
 7864        }
 7865        pmask_qSetBitVal(parent,TradingSessionID_Present_GetBit(parent),prs);
 7866    }
 7867    // TradingSessionSubID type default optional
 7868    if (ok) {
 7869        bool prs = lib_fast::GetPmapBit(pmap,6);
 7870        if (prs) {
 7871            prs = !lib_fast::DecodeNull(from);
 7872            if (prs) {
 7873                ok = lib_fast::DecodeUnsigned(from,parent.TradingSessionSubID.value,true);
 7874                if (!ok) {
 7875                    state.error << "emdi12.MDSshGrp.TradingSessionSubID: bad Unsigned" << eol;
 7876                }
 7877            }
 7878        } else {
 7879        }
 7880        pmask_qSetBitVal(parent,TradingSessionSubID_Present_GetBit(parent),prs);
 7881    }
 7882    // TESTradSesStatus type default optional
 7883    if (ok) {
 7884        bool prs = lib_fast::GetPmapBit(pmap,7);
 7885        if (prs) {
 7886            prs = !lib_fast::DecodeNull(from);
 7887            if (prs) {
 7888                ok = lib_fast::DecodeUnsigned(from,parent.TESTradSesStatus.value,true);
 7889                if (!ok) {
 7890                    state.error << "emdi12.MDSshGrp.TESTradSesStatus: bad Unsigned" << eol;
 7891                }
 7892            }
 7893        } else {
 7894        }
 7895        pmask_qSetBitVal(parent,TESTradSesStatus_Present_GetBit(parent),prs);
 7896    }
 7897    // SecurityTradingStatus type default optional
 7898    if (ok) {
 7899        bool prs = lib_fast::GetPmapBit(pmap,8);
 7900        if (prs) {
 7901            prs = !lib_fast::DecodeNull(from);
 7902            if (prs) {
 7903                ok = lib_fast::DecodeUnsigned(from,parent.SecurityTradingStatus.value,true);
 7904                if (!ok) {
 7905                    state.error << "emdi12.MDSshGrp.SecurityTradingStatus: bad Unsigned" << eol;
 7906                }
 7907            }
 7908        } else {
 7909        }
 7910        pmask_qSetBitVal(parent,SecurityTradingStatus_Present_GetBit(parent),prs);
 7911    }
 7912    // MarketCondition type default optional
 7913    if (ok) {
 7914        bool prs = lib_fast::GetPmapBit(pmap,9);
 7915        if (prs) {
 7916            prs = !lib_fast::DecodeNull(from);
 7917            if (prs) {
 7918                ok = lib_fast::DecodeUnsigned(from,parent.MarketCondition.value,true);
 7919                if (!ok) {
 7920                    state.error << "emdi12.MDSshGrp.MarketCondition: bad Unsigned" << eol;
 7921                }
 7922            }
 7923        } else {
 7924        }
 7925        pmask_qSetBitVal(parent,MarketCondition_Present_GetBit(parent),prs);
 7926    }
 7927    // FastMarketIndicator type default optional
 7928    if (ok) {
 7929        bool prs = lib_fast::GetPmapBit(pmap,10);
 7930        if (prs) {
 7931            prs = !lib_fast::DecodeNull(from);
 7932            if (prs) {
 7933                ok = lib_fast::DecodeUnsigned(from,parent.FastMarketIndicator.value,true);
 7934                if (!ok) {
 7935                    state.error << "emdi12.MDSshGrp.FastMarketIndicator: bad Unsigned" << eol;
 7936                }
 7937            }
 7938        } else {
 7939        }
 7940        pmask_qSetBitVal(parent,FastMarketIndicator_Present_GetBit(parent),prs);
 7941    }
 7942    // SecurityTradingEvent type default optional
 7943    if (ok) {
 7944        bool prs = lib_fast::GetPmapBit(pmap,11);
 7945        if (prs) {
 7946            prs = !lib_fast::DecodeNull(from);
 7947            if (prs) {
 7948                ok = lib_fast::DecodeUnsigned(from,parent.SecurityTradingEvent.value,true);
 7949                if (!ok) {
 7950                    state.error << "emdi12.MDSshGrp.SecurityTradingEvent: bad Unsigned" << eol;
 7951                }
 7952            }
 7953        } else {
 7954        }
 7955        pmask_qSetBitVal(parent,SecurityTradingEvent_Present_GetBit(parent),prs);
 7956    }
 7957    // PotentialSecurityTradingEvent type default optional
 7958    if (ok) {
 7959        bool prs = lib_fast::GetPmapBit(pmap,12);
 7960        if (prs) {
 7961            prs = !lib_fast::DecodeNull(from);
 7962            if (prs) {
 7963                ok = lib_fast::DecodeUnsigned(from,parent.PotentialSecurityTradingEvent.value,true);
 7964                if (!ok) {
 7965                    state.error << "emdi12.MDSshGrp.PotentialSecurityTradingEvent: bad Unsigned" << eol;
 7966                }
 7967            }
 7968        } else {
 7969        }
 7970        pmask_qSetBitVal(parent,PotentialSecurityTradingEvent_Present_GetBit(parent),prs);
 7971    }
 7972    // SoldOutIndicator type default optional
 7973    if (ok) {
 7974        bool prs = lib_fast::GetPmapBit(pmap,13);
 7975        if (prs) {
 7976            prs = !lib_fast::DecodeNull(from);
 7977            if (prs) {
 7978                ok = lib_fast::DecodeUnsigned(from,parent.SoldOutIndicator.value,true);
 7979                if (!ok) {
 7980                    state.error << "emdi12.MDSshGrp.SoldOutIndicator: bad Unsigned" << eol;
 7981                }
 7982            }
 7983        } else {
 7984        }
 7985        pmask_qSetBitVal(parent,SoldOutIndicator_Present_GetBit(parent),prs);
 7986    }
 7987    // HighPx scaled delta optional
 7988    if (ok) {
 7989        if (!HighPx_AssignedQ(state)) {
 7990            HighPx_SetAssigned(state);
 7991            bool prs(true);
 7992            present_qSetBitVal(state,HighPx_Present_GetBit(state),prs);
 7993            state.HighPx = algo::Decimal(0,0);
 7994        }
 7995        bool prs = !lib_fast::DecodeNull(from);
 7996        if (prs) {
 7997            if (!HighPx_PresentQ(state)) {
 7998                state.HighPx = algo::Decimal(0,0);
 7999            }
 8000            ok = lib_fast::DecodeDeltaScaled(from,state.HighPx,parent.HighPx,true);
 8001            if (!ok) {
 8002                state.error << "emdi12.MDSshGrp.HighPx: bad Scaled delta" << eol;
 8003            }
 8004            state.HighPx = parent.HighPx;
 8005        }
 8006        pmask_qSetBitVal(parent,HighPx_Present_GetBit(parent),prs);
 8007        present_qSetBitVal(state,HighPx_Present_GetBit(state),prs);
 8008    }
 8009    // LowPx scaled delta optional
 8010    if (ok) {
 8011        if (!LowPx_AssignedQ(state)) {
 8012            LowPx_SetAssigned(state);
 8013            bool prs(true);
 8014            present_qSetBitVal(state,LowPx_Present_GetBit(state),prs);
 8015            state.LowPx = algo::Decimal(0,0);
 8016        }
 8017        bool prs = !lib_fast::DecodeNull(from);
 8018        if (prs) {
 8019            if (!LowPx_PresentQ(state)) {
 8020                state.LowPx = algo::Decimal(0,0);
 8021            }
 8022            ok = lib_fast::DecodeDeltaScaled(from,state.LowPx,parent.LowPx,true);
 8023            if (!ok) {
 8024                state.error << "emdi12.MDSshGrp.LowPx: bad Scaled delta" << eol;
 8025            }
 8026            state.LowPx = parent.LowPx;
 8027        }
 8028        pmask_qSetBitVal(parent,LowPx_Present_GetBit(parent),prs);
 8029        present_qSetBitVal(state,LowPx_Present_GetBit(state),prs);
 8030    }
 8031    // TradeCondition type default optional
 8032    if (ok) {
 8033        bool prs = lib_fast::GetPmapBit(pmap,14);
 8034        if (prs) {
 8035            prs = !lib_fast::DecodeNull(from);
 8036            if (prs) {
 8037                ok = lib_fast::DecodeUnsigned(from,parent.TradeCondition.value,true);
 8038                if (!ok) {
 8039                    state.error << "emdi12.MDSshGrp.TradeCondition: bad Unsigned" << eol;
 8040                }
 8041            }
 8042        } else {
 8043        }
 8044        pmask_qSetBitVal(parent,TradeCondition_Present_GetBit(parent),prs);
 8045    }
 8046    // MultiLegReportingType type default optional
 8047    if (ok) {
 8048        bool prs = lib_fast::GetPmapBit(pmap,15);
 8049        if (prs) {
 8050            prs = !lib_fast::DecodeNull(from);
 8051            if (prs) {
 8052                ok = lib_fast::DecodeUnsigned(from,parent.MultiLegReportingType.value,true);
 8053                if (!ok) {
 8054                    state.error << "emdi12.MDSshGrp.MultiLegReportingType: bad Unsigned" << eol;
 8055                }
 8056            }
 8057        } else {
 8058        }
 8059        pmask_qSetBitVal(parent,MultiLegReportingType_Present_GetBit(parent),prs);
 8060    }
 8061    // MultiLegPriceModel type default optional
 8062    if (ok) {
 8063        bool prs = lib_fast::GetPmapBit(pmap,16);
 8064        if (prs) {
 8065            prs = !lib_fast::DecodeNull(from);
 8066            if (prs) {
 8067                ok = lib_fast::DecodeUnsigned(from,parent.MultiLegPriceModel.value,true);
 8068                if (!ok) {
 8069                    state.error << "emdi12.MDSshGrp.MultiLegPriceModel: bad Unsigned" << eol;
 8070                }
 8071            }
 8072        } else {
 8073        }
 8074        pmask_qSetBitVal(parent,MultiLegPriceModel_Present_GetBit(parent),prs);
 8075    }
 8076    // QuoteCondition type copy optional
 8077    if (ok) {
 8078        bool prs = lib_fast::GetPmapBit(pmap,17);
 8079        if (prs) {
 8080            prs = !lib_fast::DecodeNull(from);
 8081            if (prs) {
 8082                ok = lib_fast::DecodeUnsigned(from,parent.QuoteCondition.value,true);
 8083                if (!ok) {
 8084                    state.error << "emdi12.MDSshGrp.QuoteCondition: bad Unsigned" << eol;
 8085                }
 8086            }
 8087        } else if (QuoteCondition_AssignedQ(state)) {
 8088            parent.QuoteCondition.value = state.QuoteCondition.value;
 8089            prs = QuoteCondition_PresentQ(state);
 8090        } else {
 8091            prs = false;
 8092        }
 8093        pmask_qSetBitVal(parent,QuoteCondition_Present_GetBit(parent),prs);
 8094        QuoteCondition_SetAssigned(state);
 8095        present_qSetBitVal(state,QuoteCondition_Present_GetBit(state),prs);
 8096        state.QuoteCondition.value = parent.QuoteCondition.value;
 8097    }
 8098    // MDEntryPx scaled delta optional
 8099    if (ok) {
 8100        if (!MDEntryPx_AssignedQ(state)) {
 8101            MDEntryPx_SetAssigned(state);
 8102            bool prs(true);
 8103            present_qSetBitVal(state,MDEntryPx_Present_GetBit(state),prs);
 8104            state.MDEntryPx = algo::Decimal(0,0);
 8105        }
 8106        bool prs = !lib_fast::DecodeNull(from);
 8107        if (prs) {
 8108            if (!MDEntryPx_PresentQ(state)) {
 8109                state.MDEntryPx = algo::Decimal(0,0);
 8110            }
 8111            ok = lib_fast::DecodeDeltaScaled(from,state.MDEntryPx,parent.MDEntryPx,true);
 8112            if (!ok) {
 8113                state.error << "emdi12.MDSshGrp.MDEntryPx: bad Scaled delta" << eol;
 8114            }
 8115            state.MDEntryPx = parent.MDEntryPx;
 8116        }
 8117        pmask_qSetBitVal(parent,MDEntryPx_Present_GetBit(parent),prs);
 8118        present_qSetBitVal(state,MDEntryPx_Present_GetBit(state),prs);
 8119    }
 8120    // MDEntrySize scaled delta optional
 8121    if (ok) {
 8122        if (!MDEntrySize_AssignedQ(state)) {
 8123            MDEntrySize_SetAssigned(state);
 8124            bool prs(true);
 8125            present_qSetBitVal(state,MDEntrySize_Present_GetBit(state),prs);
 8126            state.MDEntrySize = algo::Decimal(0,0);
 8127        }
 8128        bool prs = !lib_fast::DecodeNull(from);
 8129        if (prs) {
 8130            if (!MDEntrySize_PresentQ(state)) {
 8131                state.MDEntrySize = algo::Decimal(0,0);
 8132            }
 8133            ok = lib_fast::DecodeDeltaScaled(from,state.MDEntrySize,parent.MDEntrySize,true);
 8134            if (!ok) {
 8135                state.error << "emdi12.MDSshGrp.MDEntrySize: bad Scaled delta" << eol;
 8136            }
 8137            state.MDEntrySize = parent.MDEntrySize;
 8138        }
 8139        pmask_qSetBitVal(parent,MDEntrySize_Present_GetBit(parent),prs);
 8140        present_qSetBitVal(state,MDEntrySize_Present_GetBit(state),prs);
 8141    }
 8142    // NumberOfOrders unsigned delta optional
 8143    if (ok) {
 8144        if (!NumberOfOrders_AssignedQ(state)) {
 8145            NumberOfOrders_SetAssigned(state);
 8146            bool prs(true);
 8147            present_qSetBitVal(state,NumberOfOrders_Present_GetBit(state),prs);
 8148            state.NumberOfOrders = 0;
 8149        }
 8150        bool prs = !lib_fast::DecodeNull(from);
 8151        if (prs) {
 8152            if (!NumberOfOrders_PresentQ(state)) {
 8153                state.NumberOfOrders = 0;
 8154            }
 8155            ok = lib_fast::DecodeDeltaUnsigned(from,state.NumberOfOrders,parent.NumberOfOrders,true);
 8156            if (!ok) {
 8157                state.error << "emdi12.MDSshGrp.NumberOfOrders: bad Unsigned delta" << eol;
 8158            }
 8159            state.NumberOfOrders = parent.NumberOfOrders;
 8160        }
 8161        pmask_qSetBitVal(parent,NumberOfOrders_Present_GetBit(parent),prs);
 8162        present_qSetBitVal(state,NumberOfOrders_Present_GetBit(state),prs);
 8163    }
 8164    // MDPriceLevel unsigned increment optional
 8165    if (ok) {
 8166        bool prs = lib_fast::GetPmapBit(pmap,18);
 8167        if (prs) {
 8168            prs = !lib_fast::DecodeNull(from);
 8169            if (prs) {
 8170                ok = lib_fast::DecodeUnsigned(from,parent.MDPriceLevel,true);
 8171                if (!ok) {
 8172                    state.error << "emdi12.MDSshGrp.MDPriceLevel: bad Unsigned" << eol;
 8173                }
 8174            }
 8175        } else if (MDPriceLevel_AssignedQ(state)) {
 8176            parent.MDPriceLevel = state.MDPriceLevel + 1;
 8177            prs = MDPriceLevel_PresentQ(state);
 8178        } else {
 8179            prs = false;
 8180        }
 8181        pmask_qSetBitVal(parent,MDPriceLevel_Present_GetBit(parent),prs);
 8182        MDPriceLevel_SetAssigned(state);
 8183        present_qSetBitVal(state,MDPriceLevel_Present_GetBit(state),prs);
 8184        state.MDPriceLevel = parent.MDPriceLevel;
 8185    }
 8186    // MDEntryTime signed delta optional
 8187    if (ok) {
 8188        if (!MDEntryTime_AssignedQ(state)) {
 8189            MDEntryTime_SetAssigned(state);
 8190            bool prs(true);
 8191            present_qSetBitVal(state,MDEntryTime_Present_GetBit(state),prs);
 8192            state.MDEntryTime = 0;
 8193        }
 8194        bool prs = !lib_fast::DecodeNull(from);
 8195        if (prs) {
 8196            if (!MDEntryTime_PresentQ(state)) {
 8197                state.MDEntryTime = 0;
 8198            }
 8199            ok = lib_fast::DecodeDeltaSigned(from,state.MDEntryTime,parent.MDEntryTime,true);
 8200            if (!ok) {
 8201                state.error << "emdi12.MDSshGrp.MDEntryTime: bad Signed delta" << eol;
 8202            }
 8203            state.MDEntryTime = parent.MDEntryTime;
 8204        }
 8205        pmask_qSetBitVal(parent,MDEntryTime_Present_GetBit(parent),prs);
 8206        present_qSetBitVal(state,MDEntryTime_Present_GetBit(state),prs);
 8207    }
 8208    // NonDisclosedTradeVolume scaled default optional
 8209    if (ok) {
 8210        bool prs = lib_fast::GetPmapBit(pmap,19);
 8211        if (prs) {
 8212            prs = !lib_fast::DecodeNull(from);
 8213            if (prs) {
 8214                ok = lib_fast::DecodeScaled(from,parent.NonDisclosedTradeVolume,true);
 8215                if (!ok) {
 8216                    state.error << "emdi12.MDSshGrp.NonDisclosedTradeVolume: bad Scaled" << eol;
 8217                }
 8218            }
 8219        } else {
 8220            parent.NonDisclosedTradeVolume = algo::Decimal(0,0);
 8221            prs = true;
 8222        }
 8223        pmask_qSetBitVal(parent,NonDisclosedTradeVolume_Present_GetBit(parent),prs);
 8224    }
 8225    // TotalNumOfTrades unsigned default optional
 8226    if (ok) {
 8227        bool prs = lib_fast::GetPmapBit(pmap,20);
 8228        if (prs) {
 8229            prs = !lib_fast::DecodeNull(from);
 8230            if (prs) {
 8231                ok = lib_fast::DecodeUnsigned(from,parent.TotalNumOfTrades,true);
 8232                if (!ok) {
 8233                    state.error << "emdi12.MDSshGrp.TotalNumOfTrades: bad Unsigned" << eol;
 8234                }
 8235            }
 8236        } else {
 8237        }
 8238        pmask_qSetBitVal(parent,TotalNumOfTrades_Present_GetBit(parent),prs);
 8239    }
 8240    return ok;
 8241}
 8242
 8243// --- emdi12.MDSshGrp..FixEncode
 8244void emdi12::MDSshGrp_FixEncode(cstring& buf, emdi12::MDSshGrp& parent, char soh) {
 8245    buf << "1024=" << parent.MDOriginType << soh;
 8246    buf << "269=" << parent.MDEntryType << soh;
 8247    if (MDBookType_PresentQ(parent)) {
 8248        buf << "1021=" << parent.MDBookType << soh;
 8249    }
 8250    if (MDSubBookType_PresentQ(parent)) {
 8251        buf << "1173=" << parent.MDSubBookType << soh;
 8252    }
 8253    if (TrdType_PresentQ(parent)) {
 8254        buf << "828=" << parent.TrdType << soh;
 8255    }
 8256    if (TradingSessionID_PresentQ(parent)) {
 8257        buf << "336=" << parent.TradingSessionID << soh;
 8258    }
 8259    if (TradingSessionSubID_PresentQ(parent)) {
 8260        buf << "625=" << parent.TradingSessionSubID << soh;
 8261    }
 8262    if (TESTradSesStatus_PresentQ(parent)) {
 8263        buf << "25044=" << parent.TESTradSesStatus << soh;
 8264    }
 8265    if (SecurityTradingStatus_PresentQ(parent)) {
 8266        buf << "326=" << parent.SecurityTradingStatus << soh;
 8267    }
 8268    if (MarketCondition_PresentQ(parent)) {
 8269        buf << "2705=" << parent.MarketCondition << soh;
 8270    }
 8271    if (FastMarketIndicator_PresentQ(parent)) {
 8272        buf << "2447=" << parent.FastMarketIndicator << soh;
 8273    }
 8274    if (SecurityTradingEvent_PresentQ(parent)) {
 8275        buf << "1174=" << parent.SecurityTradingEvent << soh;
 8276    }
 8277    if (PotentialSecurityTradingEvent_PresentQ(parent)) {
 8278        buf << "28872=" << parent.PotentialSecurityTradingEvent << soh;
 8279    }
 8280    if (SoldOutIndicator_PresentQ(parent)) {
 8281        buf << "25155=" << parent.SoldOutIndicator << soh;
 8282    }
 8283    if (HighPx_PresentQ(parent)) {
 8284        buf << "332=" << parent.HighPx << soh;
 8285    }
 8286    if (LowPx_PresentQ(parent)) {
 8287        buf << "333=" << parent.LowPx << soh;
 8288    }
 8289    if (TradeCondition_PresentQ(parent)) {
 8290        buf << "277=" << parent.TradeCondition << soh;
 8291    }
 8292    if (MultiLegReportingType_PresentQ(parent)) {
 8293        buf << "442=" << parent.MultiLegReportingType << soh;
 8294    }
 8295    if (MultiLegPriceModel_PresentQ(parent)) {
 8296        buf << "28750=" << parent.MultiLegPriceModel << soh;
 8297    }
 8298    if (QuoteCondition_PresentQ(parent)) {
 8299        buf << "276=" << parent.QuoteCondition << soh;
 8300    }
 8301    if (MDEntryPx_PresentQ(parent)) {
 8302        buf << "270=" << parent.MDEntryPx << soh;
 8303    }
 8304    if (MDEntrySize_PresentQ(parent)) {
 8305        buf << "271=" << parent.MDEntrySize << soh;
 8306    }
 8307    if (NumberOfOrders_PresentQ(parent)) {
 8308        buf << "346=" << parent.NumberOfOrders << soh;
 8309    }
 8310    if (MDPriceLevel_PresentQ(parent)) {
 8311        buf << "1023=" << parent.MDPriceLevel << soh;
 8312    }
 8313    if (MDEntryTime_PresentQ(parent)) {
 8314        buf << "273=" << parent.MDEntryTime << soh;
 8315    }
 8316    if (NonDisclosedTradeVolume_PresentQ(parent)) {
 8317        buf << "28873=" << parent.NonDisclosedTradeVolume << soh;
 8318    }
 8319    if (TotalNumOfTrades_PresentQ(parent)) {
 8320        buf << "6139=" << parent.TotalNumOfTrades << soh;
 8321    }
 8322}
 8323
 8324// --- emdi12.DepthSnapshot.base.CopyOut
 8325// Copy fields out of row
 8326void emdi12::parent_CopyOut(emdi12::DepthSnapshot &row, emdi12::TemplateHeader &out) {
 8327    // length: field value is computed
 8328    // id: field value is computed
 8329    (void)row;//only to avoid -Wunused-parameter
 8330    (void)out;//only to avoid -Wunused-parameter
 8331}
 8332
 8333// --- emdi12.DepthSnapshot.MsgSeqNum.ReadStrptrMaybe
 8334inline static bool emdi12::MsgSeqNum_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) {
 8335    bool retval = true;
 8336    u32 MsgSeqNum_tmp;
 8337    retval = u32_ReadStrptrMaybe(MsgSeqNum_tmp, in_str);
 8338    if (retval) {
 8339        MsgSeqNum_Set(parent, MsgSeqNum_tmp);
 8340    }
 8341    return retval;
 8342}
 8343
 8344// --- emdi12.DepthSnapshot.SenderCompID.ReadStrptrMaybe
 8345inline static bool emdi12::SenderCompID_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) {
 8346    bool retval = true;
 8347    retval = u32_ReadStrptrMaybe(parent.SenderCompID, in_str);
 8348    return retval;
 8349}
 8350
 8351// --- emdi12.DepthSnapshot.LastMsgSeqNumProcessed.ReadStrptrMaybe
 8352inline static bool emdi12::LastMsgSeqNumProcessed_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) {
 8353    bool retval = true;
 8354    u32 LastMsgSeqNumProcessed_tmp;
 8355    retval = u32_ReadStrptrMaybe(LastMsgSeqNumProcessed_tmp, in_str);
 8356    if (retval) {
 8357        LastMsgSeqNumProcessed_Set(parent, LastMsgSeqNumProcessed_tmp);
 8358    }
 8359    return retval;
 8360}
 8361
 8362// --- emdi12.DepthSnapshot.RefreshIndicator.ReadStrptrMaybe
 8363inline static bool emdi12::RefreshIndicator_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) {
 8364    bool retval = true;
 8365    emdi12::RefreshIndicator RefreshIndicator_tmp;
 8366    retval = emdi12::RefreshIndicator_ReadStrptrMaybe(RefreshIndicator_tmp, in_str);
 8367    if (retval) {
 8368        RefreshIndicator_Set(parent, RefreshIndicator_tmp);
 8369    }
 8370    return retval;
 8371}
 8372
 8373// --- emdi12.DepthSnapshot.MarketSegmentID.ReadStrptrMaybe
 8374inline static bool emdi12::MarketSegmentID_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) {
 8375    bool retval = true;
 8376    retval = u32_ReadStrptrMaybe(parent.MarketSegmentID, in_str);
 8377    return retval;
 8378}
 8379
 8380// --- emdi12.DepthSnapshot.SecurityID.ReadStrptrMaybe
 8381inline static bool emdi12::SecurityID_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) {
 8382    bool retval = true;
 8383    retval = i64_ReadStrptrMaybe(parent.SecurityID, in_str);
 8384    return retval;
 8385}
 8386
 8387// --- emdi12.DepthSnapshot.ProductComplex.ReadStrptrMaybe
 8388inline static bool emdi12::ProductComplex_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) {
 8389    bool retval = true;
 8390    retval = emdi12::ProductComplex_ReadStrptrMaybe(parent.ProductComplex, in_str);
 8391    return retval;
 8392}
 8393
 8394// --- emdi12.DepthSnapshot.SecurityStatus.ReadStrptrMaybe
 8395inline static bool emdi12::SecurityStatus_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) {
 8396    bool retval = true;
 8397    retval = emdi12::SecurityStatus_ReadStrptrMaybe(parent.SecurityStatus, in_str);
 8398    return retval;
 8399}
 8400
 8401// --- emdi12.DepthSnapshot.TESSecurityStatus.ReadStrptrMaybe
 8402inline static bool emdi12::TESSecurityStatus_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) {
 8403    bool retval = true;
 8404    emdi12::SecurityStatus TESSecurityStatus_tmp;
 8405    retval = emdi12::SecurityStatus_ReadStrptrMaybe(TESSecurityStatus_tmp, in_str);
 8406    if (retval) {
 8407        TESSecurityStatus_Set(parent, TESSecurityStatus_tmp);
 8408    }
 8409    return retval;
 8410}
 8411
 8412// --- emdi12.DepthSnapshot.LastUpdateTime.ReadStrptrMaybe
 8413inline static bool emdi12::LastUpdateTime_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) {
 8414    bool retval = true;
 8415    retval = i64_ReadStrptrMaybe(parent.LastUpdateTime, in_str);
 8416    return retval;
 8417}
 8418
 8419// --- emdi12.DepthSnapshot.MDSshGrp.Getary
 8420// Access var-length portion as an aryptr. Length is determined from one of the fields.
 8421algo::aryptr<emdi12::MDSshGrp> emdi12::MDSshGrp_Getary(emdi12::DepthSnapshot& parent) {
 8422    return algo::aryptr<emdi12::MDSshGrp>(MDSshGrp_Addr(parent), MDSshGrp_N(parent));
 8423}
 8424
 8425// --- emdi12.DepthSnapshot.MDSshGrp.Addr
 8426emdi12::MDSshGrp* emdi12::MDSshGrp_Addr(emdi12::DepthSnapshot& parent) {
 8427    return (emdi12::MDSshGrp*)((u8*)&parent + sizeof(emdi12::DepthSnapshot)); // address of varlen portion
 8428}
 8429
 8430// --- emdi12.DepthSnapshot.MDSshGrp.ReadStrptrMaybe
 8431// Convert string to field. Return success value
 8432bool emdi12::MDSshGrp_ReadStrptrMaybe(emdi12::DepthSnapshot& parent, algo::strptr in_str) {
 8433    bool retval = true;
 8434    if (algo_lib::_db.varlenbuf) {
 8435        emdi12::MDSshGrp *MDSshGrp_tmp = new(ary_AllocN(*algo_lib::_db.varlenbuf, sizeof(emdi12::MDSshGrp)).elems) emdi12::MDSshGrp;
 8436        retval = emdi12::MDSshGrp_ReadStrptrMaybe(*MDSshGrp_tmp, in_str);
 8437    }
 8438    (void)parent;//only to avoid -Wunused-parameter
 8439    return retval;
 8440}
 8441
 8442// --- emdi12.DepthSnapshot.pmask_bitcurs.Next
 8443// proceed to next item
 8444void emdi12::DepthSnapshot_pmask_bitcurs_Next(DepthSnapshot_pmask_bitcurs &curs) {
 8445    ++curs.bit;
 8446    int index = curs.bit / 32;
 8447    int offset = curs.bit % 32;
 8448    for (; index < curs.n_elems; ++index, offset = 0) {
 8449        u64 rest = curs.elems[index] >> offset;
 8450        if (rest) {
 8451            offset += algo::u64_BitScanForward(rest);
 8452            break;
 8453        }
 8454    }
 8455    curs.bit = index * 32 + offset;
 8456}
 8457
 8458// --- emdi12.DepthSnapshot..ReadFieldMaybe
 8459bool emdi12::DepthSnapshot_ReadFieldMaybe(emdi12::DepthSnapshot& parent, algo::strptr field, algo::strptr strval) {
 8460    bool retval = true;
 8461    emdi12::FieldId field_id;
 8462    (void)value_SetStrptrMaybe(field_id,algo::Pathcomp(field, ".LL"));
 8463    switch(field_id) {
 8464        case emdi12_FieldId_base: {
 8465            retval = false;
 8466            break;
 8467        }
 8468        case emdi12_FieldId_length: {
 8469            retval = false;
 8470            break;
 8471        }
 8472        case emdi12_FieldId_id: {
 8473            retval = false;
 8474            break;
 8475        }
 8476        case emdi12_FieldId_pmask: {
 8477            retval = false;
 8478            break;
 8479        }
 8480        case emdi12_FieldId_MsgType: {
 8481            retval = true;
 8482            break;
 8483        }
 8484        case emdi12_FieldId_MsgSeqNum: {
 8485            retval = MsgSeqNum_ReadStrptrMaybe(parent, strval);
 8486            if (retval) {
 8487                pmask_qSetBit(parent, 1);
 8488            }
 8489            break;
 8490        }
 8491        case emdi12_FieldId_SenderCompID: {
 8492            retval = SenderCompID_ReadStrptrMaybe(parent, strval);
 8493            break;
 8494        }
 8495        case emdi12_FieldId_LastMsgSeqNumProcessed: {
 8496            retval = LastMsgSeqNumProcessed_ReadStrptrMaybe(parent, strval);
 8497            if (retval) {
 8498                pmask_qSetBit(parent, 0);
 8499            }
 8500            break;
 8501        }
 8502        case emdi12_FieldId_RefreshIndicator: {
 8503            retval = RefreshIndicator_ReadStrptrMaybe(parent, strval);
 8504            if (retval) {
 8505                pmask_qSetBit(parent, 2);
 8506            }
 8507            break;
 8508        }
 8509        case emdi12_FieldId_MarketSegmentID: {
 8510            retval = MarketSegmentID_ReadStrptrMaybe(parent, strval);
 8511            break;
 8512        }
 8513        case emdi12_FieldId_SecurityID: {
 8514            retval = SecurityID_ReadStrptrMaybe(parent, strval);
 8515            break;
 8516        }
 8517        case emdi12_FieldId_SecurityIDSource: {
 8518            retval = true;
 8519            break;
 8520        }
 8521        case emdi12_FieldId_ProductComplex: {
 8522            retval = ProductComplex_ReadStrptrMaybe(parent, strval);
 8523            break;
 8524        }
 8525        case emdi12_FieldId_SecurityStatus: {
 8526            retval = SecurityStatus_ReadStrptrMaybe(parent, strval);
 8527            break;
 8528        }
 8529        case emdi12_FieldId_TESSecurityStatus: {
 8530            retval = TESSecurityStatus_ReadStrptrMaybe(parent, strval);
 8531            if (retval) {
 8532                pmask_qSetBit(parent, 3);
 8533            }
 8534            break;
 8535        }
 8536        case emdi12_FieldId_LastUpdateTime: {
 8537            retval = LastUpdateTime_ReadStrptrMaybe(parent, strval);
 8538            break;
 8539        }
 8540        case emdi12_FieldId_MDSshGrp: {
 8541            retval = MDSshGrp_ReadStrptrMaybe(parent, strval);
 8542            break;
 8543        }
 8544        default: break;
 8545    }
 8546    if (!retval) {
 8547        algo_lib::AppendErrtext("attr",field);
 8548    }
 8549    return retval;
 8550}
 8551
 8552// --- emdi12.DepthSnapshot..ReadStrptrMaybe
 8553// Any varlen fields are returned in algo_lib::_db.varlenbuf if set
 8554// Read fields of emdi12::DepthSnapshot from an ascii string.
 8555// The format of the string is an ssim Tuple
 8556bool emdi12::DepthSnapshot_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) {
 8557    bool retval = true;
 8558    retval = algo::StripTypeTag(in_str, "emdi12.DepthSnapshot");
 8559    ind_beg(algo::Attr_curs, attr, in_str) {
 8560        retval = retval && DepthSnapshot_ReadFieldMaybe(parent, attr.name, attr.value);
 8561    }ind_end;
 8562    return retval;
 8563}
 8564
 8565// --- emdi12.DepthSnapshot..Init
 8566// Set all fields to initial values.
 8567void emdi12::DepthSnapshot_Init(emdi12::DepthSnapshot& parent) {
 8568    parent.length = u32(ssizeof(parent) + (0));
 8569    parent.id = u32(93);
 8570    parent.pmask = u32(0);
 8571    parent.MsgSeqNum = u32(0);
 8572    parent.SenderCompID = u32(0);
 8573    parent.LastMsgSeqNumProcessed = u32(0);
 8574    parent.MarketSegmentID = u32(0);
 8575    parent.SecurityID = i64(0);
 8576    parent.SecurityStatus = emdi12_SecurityStatusEnum(0);
 8577    parent.LastUpdateTime = i64(0);
 8578}
 8579
 8580// --- emdi12.DepthSnapshot..Print
 8581// print string representation of ROW to string STR
 8582// cfmt:emdi12.DepthSnapshot.String  printfmt:Tuple
 8583void emdi12::DepthSnapshot_Print(emdi12::DepthSnapshot& row, algo::cstring& str) {
 8584    algo::tempstr temp;
 8585    str << "emdi12.DepthSnapshot";
 8586
 8587    algo::strptr_Print(MsgType_Get(row), temp);
 8588    PrintAttrSpaceReset(str,"MsgType", temp);
 8589
 8590    if (MsgSeqNum_PresentQ(row)) {
 8591        u32_Print(row.MsgSeqNum, temp);
 8592        PrintAttrSpaceReset(str,"MsgSeqNum", temp);
 8593    }
 8594
 8595    u32_Print(row.SenderCompID, temp);
 8596    PrintAttrSpaceReset(str,"SenderCompID", temp);
 8597
 8598    if (LastMsgSeqNumProcessed_PresentQ(row)) {
 8599        u32_Print(row.LastMsgSeqNumProcessed, temp);
 8600        PrintAttrSpaceReset(str,"LastMsgSeqNumProcessed", temp);
 8601    }
 8602
 8603    if (RefreshIndicator_PresentQ(row)) {
 8604        emdi12::RefreshIndicator_Print(row.RefreshIndicator, temp);
 8605        PrintAttrSpaceReset(str,"RefreshIndicator", temp);
 8606    }
 8607
 8608    u32_Print(row.MarketSegmentID, temp);
 8609    PrintAttrSpaceReset(str,"MarketSegmentID", temp);
 8610
 8611    i64_Print(row.SecurityID, temp);
 8612    PrintAttrSpaceReset(str,"SecurityID", temp);
 8613
 8614    algo::strptr_Print(SecurityIDSource_Get(row), temp);
 8615    PrintAttrSpaceReset(str,"SecurityIDSource", temp);
 8616
 8617    emdi12::ProductComplex_Print(row.ProductComplex, temp);
 8618    PrintAttrSpaceReset(str,"ProductComplex", temp);
 8619
 8620    emdi12::SecurityStatus_Print(row.SecurityStatus, temp);
 8621    PrintAttrSpaceReset(str,"SecurityStatus", temp);
 8622
 8623    if (TESSecurityStatus_PresentQ(row)) {
 8624        emdi12::SecurityStatus_Print(row.TESSecurityStatus, temp);
 8625        PrintAttrSpaceReset(str,"TESSecurityStatus", temp);
 8626    }
 8627
 8628    i64_Print(row.LastUpdateTime, temp);
 8629    PrintAttrSpaceReset(str,"LastUpdateTime", temp);
 8630
 8631    ind_beg(DepthSnapshot_MDSshGrp_curs,MDSshGrp,row) {
 8632        emdi12::MDSshGrp_Print(MDSshGrp, temp);
 8633        tempstr name;
 8634        name << "MDSshGrp.";
 8635        name << ind_curs(MDSshGrp).index;
 8636        PrintAttrSpaceReset(str, name, temp);
 8637    }ind_end;
 8638}
 8639
 8640// --- emdi12.DepthSnapshot..FastEncode
 8641void emdi12::DepthSnapshot_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::DepthSnapshot& parent) {
 8642    int index = ary_N(buf);
 8643    u64 pmap(0);
 8644    if (!tid_AssignedQ(state) || parent.id != state.tid) {
 8645        lib_fast::EncodeUnsigned(buf,parent.id,false);
 8646        lib_fast::SetPmapBit(pmap,0);
 8647    }
 8648    tid_SetAssigned(state);
 8649    state.tid = parent.id;
 8650    // MsgType string constant mandatory
 8651    // MsgSeqNum unsigned increment optional
 8652    if (MsgSeqNum_PresentQ(parent)) {
 8653        if (MsgSeqNum_AssignedQ(state)) {
 8654            if (!MsgSeqNum_PresentQ(state) || parent.MsgSeqNum != state.MsgSeqNum + 1) {
 8655                lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,true);
 8656                lib_fast::SetPmapBit(pmap,1);
 8657            }
 8658        } else {
 8659            lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,true);
 8660            lib_fast::SetPmapBit(pmap,1);
 8661        }
 8662    } else {
 8663        if (!MsgSeqNum_AssignedQ(state) || MsgSeqNum_PresentQ(state)) {
 8664            lib_fast::EncodeNull(buf);
 8665            lib_fast::SetPmapBit(pmap,1);
 8666        }
 8667    }
 8668    state.MsgSeqNum = parent.MsgSeqNum;
 8669    present_qSetBitVal(state,MsgSeqNum_Present_GetBit(state),MsgSeqNum_PresentQ(parent));
 8670    MsgSeqNum_SetAssigned(state);
 8671    // SenderCompID unsigned copy mandatory
 8672    if (!SenderCompID_AssignedQ(state) || parent.SenderCompID != state.SenderCompID) {
 8673        lib_fast::EncodeUnsigned(buf,parent.SenderCompID,false);
 8674        lib_fast::SetPmapBit(pmap,2);
 8675    }
 8676    state.SenderCompID = parent.SenderCompID;
 8677    SenderCompID_SetAssigned(state);
 8678    // LastMsgSeqNumProcessed unsigned increment optional
 8679    if (LastMsgSeqNumProcessed_PresentQ(parent)) {
 8680        if (LastMsgSeqNumProcessed_AssignedQ(state)) {
 8681            if (!LastMsgSeqNumProcessed_PresentQ(state) || parent.LastMsgSeqNumProcessed != state.LastMsgSeqNumProcessed + 1) {
 8682                lib_fast::EncodeUnsigned(buf,parent.LastMsgSeqNumProcessed,true);
 8683                lib_fast::SetPmapBit(pmap,3);
 8684            }
 8685        } else {
 8686            lib_fast::EncodeUnsigned(buf,parent.LastMsgSeqNumProcessed,true);
 8687            lib_fast::SetPmapBit(pmap,3);
 8688        }
 8689    } else {
 8690        if (!LastMsgSeqNumProcessed_AssignedQ(state) || LastMsgSeqNumProcessed_PresentQ(state)) {
 8691            lib_fast::EncodeNull(buf);
 8692            lib_fast::SetPmapBit(pmap,3);
 8693        }
 8694    }
 8695    state.LastMsgSeqNumProcessed = parent.LastMsgSeqNumProcessed;
 8696    present_qSetBitVal(state,LastMsgSeqNumProcessed_Present_GetBit(state),LastMsgSeqNumProcessed_PresentQ(parent));
 8697    LastMsgSeqNumProcessed_SetAssigned(state);
 8698    // RefreshIndicator type copy optional
 8699    if (RefreshIndicator_PresentQ(parent)) {
 8700        if (!RefreshIndicator_AssignedQ(state) || !RefreshIndicator_PresentQ(state) ||  parent.RefreshIndicator.value != state.RefreshIndicator.value ) {
 8701            lib_fast::EncodeUnsigned(buf,parent.RefreshIndicator.value,true);
 8702            lib_fast::SetPmapBit(pmap,4);
 8703        }
 8704    } else {
 8705        if (RefreshIndicator_AssignedQ(state)) {
 8706            lib_fast::EncodeNull(buf);
 8707            lib_fast::SetPmapBit(pmap,4);
 8708        }
 8709    }
 8710    state.RefreshIndicator.value = parent.RefreshIndicator.value;
 8711    present_qSetBitVal(state,RefreshIndicator_Present_GetBit(state),RefreshIndicator_PresentQ(parent));
 8712    RefreshIndicator_SetAssigned(state);
 8713    // MarketSegmentID unsigned copy mandatory
 8714    if (!MarketSegmentID_AssignedQ(state) || parent.MarketSegmentID != state.MarketSegmentID) {
 8715        lib_fast::EncodeUnsigned(buf,parent.MarketSegmentID,false);
 8716        lib_fast::SetPmapBit(pmap,5);
 8717    }
 8718    state.MarketSegmentID = parent.MarketSegmentID;
 8719    MarketSegmentID_SetAssigned(state);
 8720    // SecurityID signed delta mandatory
 8721    if (!SecurityID_AssignedQ(state)) {
 8722        SecurityID_SetAssigned(state);
 8723        state.SecurityID = 0;
 8724    }
 8725    lib_fast::EncodeDeltaSigned(buf,state.SecurityID,parent.SecurityID,false);
 8726    state.SecurityID = parent.SecurityID;
 8727    // SecurityIDSource string constant mandatory
 8728    // ProductComplex type copy mandatory
 8729    if (!ProductComplex_AssignedQ(state) || parent.ProductComplex.value != state.ProductComplex.value) {
 8730        lib_fast::EncodeUnsigned(buf,parent.ProductComplex.value,false);
 8731        lib_fast::SetPmapBit(pmap,6);
 8732    }
 8733    state.ProductComplex.value = parent.ProductComplex.value;
 8734    ProductComplex_SetAssigned(state);
 8735    // SecurityStatus type default mandatory
 8736    if (parent.SecurityStatus.value != 0) {
 8737        lib_fast::EncodeUnsigned(buf,parent.SecurityStatus.value,false);
 8738        lib_fast::SetPmapBit(pmap,7);
 8739    }
 8740    // TESSecurityStatus type none optional
 8741    if (TESSecurityStatus_PresentQ(parent)) {
 8742        lib_fast::EncodeUnsigned(buf,parent.TESSecurityStatus.value,true);
 8743    } else {
 8744        lib_fast::EncodeNull(buf);
 8745    }
 8746    // LastUpdateTime signed delta mandatory
 8747    if (!LastUpdateTime_AssignedQ(state)) {
 8748        LastUpdateTime_SetAssigned(state);
 8749        state.LastUpdateTime = 0;
 8750    }
 8751    lib_fast::EncodeDeltaSigned(buf,state.LastUpdateTime,parent.LastUpdateTime,false);
 8752    state.LastUpdateTime = parent.LastUpdateTime;
 8753    // MDSshGrp sequence none mandatory
 8754    {
 8755        u32 length = MDSshGrp_N(parent);
 8756        if (length != 1) {
 8757            lib_fast::EncodeUnsigned(buf,length,false);
 8758            lib_fast::SetPmapBit(pmap,8);
 8759        }
 8760        ind_beg(DepthSnapshot_MDSshGrp_curs,elem,parent) {
 8761            MDSshGrp_FastEncode(buf,state,elem);
 8762        }ind_end;
 8763    }
 8764    lib_fast::InsertPmap(buf,index,pmap);
 8765}
 8766
 8767// --- emdi12.DepthSnapshot..FastDecode
 8768bool emdi12::DepthSnapshot_FastDecode(algo::memptr& from, u64 pmap, FastState& state, emdi12::DepthSnapshot& parent) {
 8769    bool ok = true;
 8770    // MsgType string constant mandatory
 8771    if (ok) {
 8772    }
 8773    // MsgSeqNum unsigned increment optional
 8774    if (ok) {
 8775        bool prs = lib_fast::GetPmapBit(pmap,1);
 8776        if (prs) {
 8777            prs = !lib_fast::DecodeNull(from);
 8778            if (prs) {
 8779                ok = lib_fast::DecodeUnsigned(from,parent.MsgSeqNum,true);
 8780                if (!ok) {
 8781                    state.error << "emdi12.DepthSnapshot.MsgSeqNum: bad Unsigned" << eol;
 8782                }
 8783            }
 8784        } else if (MsgSeqNum_AssignedQ(state)) {
 8785            parent.MsgSeqNum = state.MsgSeqNum + 1;
 8786            prs = MsgSeqNum_PresentQ(state);
 8787        } else {
 8788            prs = false;
 8789        }
 8790        pmask_qSetBitVal(parent,MsgSeqNum_Present_GetBit(parent),prs);
 8791        MsgSeqNum_SetAssigned(state);
 8792        present_qSetBitVal(state,MsgSeqNum_Present_GetBit(state),prs);
 8793        state.MsgSeqNum = parent.MsgSeqNum;
 8794    }
 8795    // SenderCompID unsigned copy mandatory
 8796    if (ok) {
 8797        bool prs = lib_fast::GetPmapBit(pmap,2);
 8798        if (prs) {
 8799            ok = lib_fast::DecodeUnsigned(from,parent.SenderCompID,false);
 8800            if (!ok) {
 8801                state.error << "emdi12.DepthSnapshot.SenderCompID: bad Unsigned" << eol;
 8802            }
 8803        } else if (SenderCompID_AssignedQ(state)) {
 8804            parent.SenderCompID = state.SenderCompID;
 8805        } else {
 8806            ok = false;
 8807            state.error << "emdi12.DepthSnapshot.SenderCompID: copy operator: previous value unassigned" << eol;
 8808        }
 8809        SenderCompID_SetAssigned(state);
 8810        state.SenderCompID = parent.SenderCompID;
 8811    }
 8812    // LastMsgSeqNumProcessed unsigned increment optional
 8813    if (ok) {
 8814        bool prs = lib_fast::GetPmapBit(pmap,3);
 8815        if (prs) {
 8816            prs = !lib_fast::DecodeNull(from);
 8817            if (prs) {
 8818                ok = lib_fast::DecodeUnsigned(from,parent.LastMsgSeqNumProcessed,true);
 8819                if (!ok) {
 8820                    state.error << "emdi12.DepthSnapshot.LastMsgSeqNumProcessed: bad Unsigned" << eol;
 8821                }
 8822            }
 8823        } else if (LastMsgSeqNumProcessed_AssignedQ(state)) {
 8824            parent.LastMsgSeqNumProcessed = state.LastMsgSeqNumProcessed + 1;
 8825            prs = LastMsgSeqNumProcessed_PresentQ(state);
 8826        } else {
 8827            prs = false;
 8828        }
 8829        pmask_qSetBitVal(parent,LastMsgSeqNumProcessed_Present_GetBit(parent),prs);
 8830        LastMsgSeqNumProcessed_SetAssigned(state);
 8831        present_qSetBitVal(state,LastMsgSeqNumProcessed_Present_GetBit(state),prs);
 8832        state.LastMsgSeqNumProcessed = parent.LastMsgSeqNumProcessed;
 8833    }
 8834    // RefreshIndicator type copy optional
 8835    if (ok) {
 8836        bool prs = lib_fast::GetPmapBit(pmap,4);
 8837        if (prs) {
 8838            prs = !lib_fast::DecodeNull(from);
 8839            if (prs) {
 8840                ok = lib_fast::DecodeUnsigned(from,parent.RefreshIndicator.value,true);
 8841                if (!ok) {
 8842                    state.error << "emdi12.DepthSnapshot.RefreshIndicator: bad Unsigned" << eol;
 8843                }
 8844            }
 8845        } else if (RefreshIndicator_AssignedQ(state)) {
 8846            parent.RefreshIndicator.value = state.RefreshIndicator.value;
 8847            prs = RefreshIndicator_PresentQ(state);
 8848        } else {
 8849            prs = false;
 8850        }
 8851        pmask_qSetBitVal(parent,RefreshIndicator_Present_GetBit(parent),prs);
 8852        RefreshIndicator_SetAssigned(state);
 8853        present_qSetBitVal(state,RefreshIndicator_Present_GetBit(state),prs);
 8854        state.RefreshIndicator.value = parent.RefreshIndicator.value;
 8855    }
 8856    // MarketSegmentID unsigned copy mandatory
 8857    if (ok) {
 8858        bool prs = lib_fast::GetPmapBit(pmap,5);
 8859        if (prs) {
 8860            ok = lib_fast::DecodeUnsigned(from,parent.MarketSegmentID,false);
 8861            if (!ok) {
 8862                state.error << "emdi12.DepthSnapshot.MarketSegmentID: bad Unsigned" << eol;
 8863            }
 8864        } else if (MarketSegmentID_AssignedQ(state)) {
 8865            parent.MarketSegmentID = state.MarketSegmentID;
 8866        } else {
 8867            ok = false;
 8868            state.error << "emdi12.DepthSnapshot.MarketSegmentID: copy operator: previous value unassigned" << eol;
 8869        }
 8870        MarketSegmentID_SetAssigned(state);
 8871        state.MarketSegmentID = parent.MarketSegmentID;
 8872    }
 8873    // SecurityID signed delta mandatory
 8874    if (ok) {
 8875        if (!SecurityID_AssignedQ(state)) {
 8876            SecurityID_SetAssigned(state);
 8877            state.SecurityID = 0;
 8878        }
 8879        ok = lib_fast::DecodeDeltaSigned(from,state.SecurityID,parent.SecurityID,false);
 8880        if (!ok) {
 8881            state.error << "emdi12.DepthSnapshot.SecurityID: bad Signed delta" << eol;
 8882        }
 8883        state.SecurityID = parent.SecurityID;
 8884    }
 8885    // SecurityIDSource string constant mandatory
 8886    if (ok) {
 8887    }
 8888    // ProductComplex type copy mandatory
 8889    if (ok) {
 8890        bool prs = lib_fast::GetPmapBit(pmap,6);
 8891        if (prs) {
 8892            ok = lib_fast::DecodeUnsigned(from,parent.ProductComplex.value,false);
 8893            if (!ok) {
 8894                state.error << "emdi12.DepthSnapshot.ProductComplex: bad Unsigned" << eol;
 8895            }
 8896        } else if (ProductComplex_AssignedQ(state)) {
 8897            parent.ProductComplex.value = state.ProductComplex.value;
 8898        } else {
 8899            ok = false;
 8900            state.error << "emdi12.DepthSnapshot.ProductComplex: copy operator: previous value unassigned" << eol;
 8901        }
 8902        ProductComplex_SetAssigned(state);
 8903        state.ProductComplex.value = parent.ProductComplex.value;
 8904    }
 8905    // SecurityStatus type default mandatory
 8906    if (ok) {
 8907        bool prs = lib_fast::GetPmapBit(pmap,7);
 8908        if (prs) {
 8909            ok = lib_fast::DecodeUnsigned(from,parent.SecurityStatus.value,false);
 8910            if (!ok) {
 8911                state.error << "emdi12.DepthSnapshot.SecurityStatus: bad Unsigned" << eol;
 8912            }
 8913        } else {
 8914            parent.SecurityStatus.value = 0;
 8915        }
 8916    }
 8917    // TESSecurityStatus type none optional
 8918    if (ok) {
 8919        bool prs = !lib_fast::DecodeNull(from);
 8920        if (prs) {
 8921            ok = lib_fast::DecodeUnsigned(from,parent.TESSecurityStatus.value,true);
 8922            if (!ok) {
 8923                state.error << "emdi12.DepthSnapshot.TESSecurityStatus: bad Unsigned" << eol;
 8924            }
 8925        }
 8926        pmask_qSetBitVal(parent,TESSecurityStatus_Present_GetBit(parent),prs);
 8927    }
 8928    // LastUpdateTime signed delta mandatory
 8929    if (ok) {
 8930        if (!LastUpdateTime_AssignedQ(state)) {
 8931            LastUpdateTime_SetAssigned(state);
 8932            state.LastUpdateTime = 0;
 8933        }
 8934        ok = lib_fast::DecodeDeltaSigned(from,state.LastUpdateTime,parent.LastUpdateTime,false);
 8935        if (!ok) {
 8936            state.error << "emdi12.DepthSnapshot.LastUpdateTime: bad Signed delta" << eol;
 8937        }
 8938        state.LastUpdateTime = parent.LastUpdateTime;
 8939    }
 8940    // MDSshGrp sequence none mandatory
 8941    if (ok) {
 8942        u32 length(0);
 8943        bool prs = lib_fast::GetPmapBit(pmap,8);
 8944        if (prs) {
 8945            ok = lib_fast::DecodeUnsigned(from,length,false);
 8946            if (!ok) {
 8947                state.error << "emdi12.DepthSnapshot.MDSshGrp: bad Unsigned" << eol;
 8948            }
 8949        } else {
 8950            length = 1;
 8951        }
 8952        if (!ok) {
 8953            state.error << "emdi12.DepthSnapshot.MDSshGrp: bad length" << eol;
 8954        }
 8955        for (unsigned i=0; ok && i<length; ++i) {
 8956            MDSshGrp &seq = *new(ary_AllocN(lib_fast::_db.varlen,sizeof seq).elems) MDSshGrp;
 8957            ok = MDSshGrp_FastDecode(from,state,seq);
 8958            if (!ok) {
 8959                state.error << "emdi12.DepthSnapshot.MDSshGrp: element #"<< i+1 << eol;
 8960            }
 8961        }
 8962    }
 8963    return ok;
 8964}
 8965
 8966// --- emdi12.DepthSnapshot..FixEncode
 8967void emdi12::DepthSnapshot_FixEncode(cstring& buf, emdi12::DepthSnapshot& parent, char soh) {
 8968    buf << "35=" << MsgType_Get(parent) << soh;
 8969    if (MsgSeqNum_PresentQ(parent)) {
 8970        buf << "34=" << parent.MsgSeqNum << soh;
 8971    }
 8972    buf << "49=" << parent.SenderCompID << soh;
 8973    if (LastMsgSeqNumProcessed_PresentQ(parent)) {
 8974        buf << "369=" << parent.LastMsgSeqNumProcessed << soh;
 8975    }
 8976    if (RefreshIndicator_PresentQ(parent)) {
 8977        buf << "1187=" << parent.RefreshIndicator << soh;
 8978    }
 8979    buf << "1300=" << parent.MarketSegmentID << soh;
 8980    buf << "48=" << parent.SecurityID << soh;
 8981    buf << "22=" << SecurityIDSource_Get(parent) << soh;
 8982    buf << "1227=" << parent.ProductComplex << soh;
 8983    buf << "965=" << parent.SecurityStatus << soh;
 8984    if (TESSecurityStatus_PresentQ(parent)) {
 8985        buf << "25045=" << parent.TESSecurityStatus << soh;
 8986    }
 8987    buf << "779=" << parent.LastUpdateTime << soh;
 8988    {
 8989        u32 length = MDSshGrp_N(parent);
 8990        if (length) {
 8991            buf << "268=" << length << soh;
 8992        }
 8993    }
 8994    ind_beg(DepthSnapshot_MDSshGrp_curs,elem,parent) {
 8995        MDSshGrp_FixEncode(buf,elem,soh);
 8996    }ind_end;
 8997}
 8998
 8999// --- emdi12.EMDPacketHeader.base.CopyOut
 9000// Copy fields out of row
 9001void emdi12::parent_CopyOut(emdi12::EMDPacketHeader &row, emdi12::TemplateHeader &out) {
 9002    // length: field value is computed
 9003    // id: field value is computed
 9004    (void)row;//only to avoid -Wunused-parameter
 9005    (void)out;//only to avoid -Wunused-parameter
 9006}
 9007
 9008// --- emdi12.EMDPacketHeader..ReadFieldMaybe
 9009bool emdi12::EMDPacketHeader_ReadFieldMaybe(emdi12::EMDPacketHeader& parent, algo::strptr field, algo::strptr strval) {
 9010    bool retval = true;
 9011    emdi12::FieldId field_id;
 9012    (void)value_SetStrptrMaybe(field_id,field);
 9013    switch(field_id) {
 9014        case emdi12_FieldId_base: {
 9015            retval = false;
 9016            break;
 9017        }
 9018        case emdi12_FieldId_length: {
 9019            retval = false;
 9020            break;
 9021        }
 9022        case emdi12_FieldId_id: {
 9023            retval = false;
 9024            break;
 9025        }
 9026        case emdi12_FieldId_PartitionID: {
 9027            retval = u32_ReadStrptrMaybe(parent.PartitionID, strval);
 9028            break;
 9029        }
 9030        case emdi12_FieldId_SenderCompID: {
 9031            retval = u32_ReadStrptrMaybe(parent.SenderCompID, strval);
 9032            break;
 9033        }
 9034        case emdi12_FieldId_PacketSeqNum: {
 9035            retval = algo::Smallstr30_ReadStrptrMaybe(parent.PacketSeqNum, strval);
 9036            break;
 9037        }
 9038        case emdi12_FieldId_SendingTime: {
 9039            retval = algo::Smallstr30_ReadStrptrMaybe(parent.SendingTime, strval);
 9040            break;
 9041        }
 9042        case emdi12_FieldId_PerformanceIndicator: {
 9043            retval = algo::Smallstr30_ReadStrptrMaybe(parent.PerformanceIndicator, strval);
 9044            break;
 9045        }
 9046        default: break;
 9047    }
 9048    if (!retval) {
 9049        algo_lib::AppendErrtext("attr",field);
 9050    }
 9051    return retval;
 9052}
 9053
 9054// --- emdi12.EMDPacketHeader..ReadStrptrMaybe
 9055// Read fields of emdi12::EMDPacketHeader from an ascii string.
 9056// The format of the string is an ssim Tuple
 9057bool emdi12::EMDPacketHeader_ReadStrptrMaybe(emdi12::EMDPacketHeader &parent, algo::strptr in_str) {
 9058    bool retval = true;
 9059    retval = algo::StripTypeTag(in_str, "emdi12.EMDPacketHeader");
 9060    ind_beg(algo::Attr_curs, attr, in_str) {
 9061        retval = retval && EMDPacketHeader_ReadFieldMaybe(parent, attr.name, attr.value);
 9062    }ind_end;
 9063    return retval;
 9064}
 9065
 9066// --- emdi12.EMDPacketHeader..Print
 9067// print string representation of ROW to string STR
 9068// cfmt:emdi12.EMDPacketHeader.String  printfmt:Tuple
 9069void emdi12::EMDPacketHeader_Print(emdi12::EMDPacketHeader& row, algo::cstring& str) {
 9070    algo::tempstr temp;
 9071    str << "emdi12.EMDPacketHeader";
 9072
 9073    u32_Print(row.PartitionID, temp);
 9074    PrintAttrSpaceReset(str,"PartitionID", temp);
 9075
 9076    u32_Print(row.SenderCompID, temp);
 9077    PrintAttrSpaceReset(str,"SenderCompID", temp);
 9078
 9079    algo::Smallstr30_Print(row.PacketSeqNum, temp);
 9080    PrintAttrSpaceReset(str,"PacketSeqNum", temp);
 9081
 9082    algo::Smallstr30_Print(row.SendingTime, temp);
 9083    PrintAttrSpaceReset(str,"SendingTime", temp);
 9084
 9085    algo::Smallstr30_Print(row.PerformanceIndicator, temp);
 9086    PrintAttrSpaceReset(str,"PerformanceIndicator", temp);
 9087}
 9088
 9089// --- emdi12.EMDPacketHeader..FastEncode
 9090void emdi12::EMDPacketHeader_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::EMDPacketHeader& parent) {
 9091    int index = ary_N(buf);
 9092    u64 pmap(0);
 9093    if (!tid_AssignedQ(state) || parent.id != state.tid) {
 9094        lib_fast::EncodeUnsigned(buf,parent.id,false);
 9095        lib_fast::SetPmapBit(pmap,0);
 9096    }
 9097    tid_SetAssigned(state);
 9098    state.tid = parent.id;
 9099    // PartitionID unsigned none mandatory
 9100    lib_fast::EncodeUnsigned(buf,parent.PartitionID,false);
 9101    // SenderCompID unsigned none mandatory
 9102    lib_fast::EncodeUnsigned(buf,parent.SenderCompID,false);
 9103    // PacketSeqNum byteVector none mandatory
 9104    lib_fast::EncodeByteVector(buf,parent.PacketSeqNum,false);
 9105    // SendingTime byteVector none mandatory
 9106    lib_fast::EncodeByteVector(buf,parent.SendingTime,false);
 9107    // PerformanceIndicator byteVector none mandatory
 9108    lib_fast::EncodeByteVector(buf,parent.PerformanceIndicator,false);
 9109    lib_fast::InsertPmap(buf,index,pmap);
 9110}
 9111
 9112// --- emdi12.EMDPacketHeader..FastDecode
 9113bool emdi12::EMDPacketHeader_FastDecode(algo::memptr& from, u64 pmap, FastState& state, emdi12::EMDPacketHeader& parent) {
 9114    bool ok = true;
 9115    // PartitionID unsigned none mandatory
 9116    if (ok) {
 9117        ok = lib_fast::DecodeUnsigned(from,parent.PartitionID,false);
 9118        if (!ok) {
 9119            state.error << "emdi12.EMDPacketHeader.PartitionID: bad Unsigned" << eol;
 9120        }
 9121    }
 9122    // SenderCompID unsigned none mandatory
 9123    if (ok) {
 9124        ok = lib_fast::DecodeUnsigned(from,parent.SenderCompID,false);
 9125        if (!ok) {
 9126            state.error << "emdi12.EMDPacketHeader.SenderCompID: bad Unsigned" << eol;
 9127        }
 9128    }
 9129    // PacketSeqNum byteVector none mandatory
 9130    if (ok) {
 9131        ok = lib_fast::DecodeByteVector(from,parent.PacketSeqNum,false);
 9132        if (!ok) {
 9133            state.error << "emdi12.EMDPacketHeader.PacketSeqNum: bad ByteVector" << eol;
 9134        }
 9135    }
 9136    // SendingTime byteVector none mandatory
 9137    if (ok) {
 9138        ok = lib_fast::DecodeByteVector(from,parent.SendingTime,false);
 9139        if (!ok) {
 9140            state.error << "emdi12.EMDPacketHeader.SendingTime: bad ByteVector" << eol;
 9141        }
 9142    }
 9143    // PerformanceIndicator byteVector none mandatory
 9144    if (ok) {
 9145        ok = lib_fast::DecodeByteVector(from,parent.PerformanceIndicator,false);
 9146        if (!ok) {
 9147            state.error << "emdi12.EMDPacketHeader.PerformanceIndicator: bad ByteVector" << eol;
 9148        }
 9149    }
 9150    (void)pmap;//only to avoid -Wunused-parameter
 9151    return ok;
 9152}
 9153
 9154// --- emdi12.EMDPacketHeader..FixEncode
 9155void emdi12::EMDPacketHeader_FixEncode(cstring& buf, emdi12::EMDPacketHeader& parent, char soh) {
 9156    buf << "5948=" << parent.PartitionID << soh;
 9157    buf << "49=" << parent.SenderCompID << soh;
 9158}
 9159
 9160// --- emdi12.ExerciseStyle.value.ToCstr
 9161// Convert numeric value of field to one of predefined string constants.
 9162// If string is found, return a static C string. Otherwise, return NULL.
 9163const char* emdi12::value_ToCstr(const emdi12::ExerciseStyle& parent) {
 9164    const char *ret = NULL;
 9165    switch(value_GetEnum(parent)) {
 9166        case emdi12_ExerciseStyle_0        : ret = "0";  break;
 9167        case emdi12_ExerciseStyle_1        : ret = "1";  break;
 9168    }
 9169    return ret;
 9170}
 9171
 9172// --- emdi12.ExerciseStyle.value.Print
 9173// Convert value to a string. First, attempt conversion to a known string.
 9174// If no string matches, print value as a numeric value.
 9175void emdi12::value_Print(const emdi12::ExerciseStyle& parent, algo::cstring &lhs) {
 9176    const char *strval = value_ToCstr(parent);
 9177    if (strval) {
 9178        lhs << strval;
 9179    } else {
 9180        lhs << parent.value;
 9181    }
 9182}
 9183
 9184// --- emdi12.ExerciseStyle.value.SetStrptrMaybe
 9185// Convert string to field.
 9186// If the string is invalid, do not modify field and return false.
 9187// In case of success, return true
 9188bool emdi12::value_SetStrptrMaybe(emdi12::ExerciseStyle& parent, algo::strptr rhs) {
 9189    bool ret = false;
 9190    switch (elems_N(rhs)) {
 9191        case 1: {
 9192            switch (u64(rhs[0])) {
 9193                case '0': {
 9194                    value_SetEnum(parent,emdi12_ExerciseStyle_0); ret = true; break;
 9195                }
 9196                case '1': {
 9197                    value_SetEnum(parent,emdi12_ExerciseStyle_1); ret = true; break;
 9198                }
 9199            }
 9200            break;
 9201        }
 9202    }
 9203    return ret;
 9204}
 9205
 9206// --- emdi12.ExerciseStyle.value.SetStrptr
 9207// Convert string to field.
 9208// If the string is invalid, set numeric value to DFLT
 9209void emdi12::value_SetStrptr(emdi12::ExerciseStyle& parent, algo::strptr rhs, emdi12_ExerciseStyleEnum dflt) {
 9210    if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
 9211}
 9212
 9213// --- emdi12.ExerciseStyle.value.ReadStrptrMaybe
 9214// Convert string to field. Return success value
 9215bool emdi12::value_ReadStrptrMaybe(emdi12::ExerciseStyle& parent, algo::strptr rhs) {
 9216    bool retval = false;
 9217    retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
 9218    if (!retval) { // didn't work? try reading as underlying type
 9219        retval = u32_ReadStrptrMaybe(parent.value,rhs);
 9220    }
 9221    return retval;
 9222}
 9223
 9224// --- emdi12.ExerciseStyle..ReadStrptrMaybe
 9225// Read fields of emdi12::ExerciseStyle from an ascii string.
 9226// The format of the string is the format of the emdi12::ExerciseStyle's only field
 9227bool emdi12::ExerciseStyle_ReadStrptrMaybe(emdi12::ExerciseStyle &parent, algo::strptr in_str) {
 9228    bool retval = true;
 9229    retval = retval && value_ReadStrptrMaybe(parent, in_str);
 9230    return retval;
 9231}
 9232
 9233// --- emdi12.ExerciseStyle..Print
 9234// print string representation of ROW to string STR
 9235// cfmt:emdi12.ExerciseStyle.String  printfmt:Raw
 9236void emdi12::ExerciseStyle_Print(emdi12::ExerciseStyle row, algo::cstring& str) {
 9237    emdi12::value_Print(row, str);
 9238}
 9239
 9240// --- emdi12.FastState.assigned_bitcurs.Next
 9241// proceed to next item
 9242void emdi12::FastState_assigned_bitcurs_Next(FastState_assigned_bitcurs &curs) {
 9243    ++curs.bit;
 9244    int index = curs.bit / 64;
 9245    int offset = curs.bit % 64;
 9246    for (; index < curs.n_elems; ++index, offset = 0) {
 9247        u64 rest = curs.elems[index] >> offset;
 9248        if (rest) {
 9249            offset += algo::u64_BitScanForward(rest);
 9250            break;
 9251        }
 9252    }
 9253    curs.bit = index * 64 + offset;
 9254}
 9255
 9256// --- emdi12.FastState.present_bitcurs.Next
 9257// proceed to next item
 9258void emdi12::FastState_present_bitcurs_Next(FastState_present_bitcurs &curs) {
 9259    ++curs.bit;
 9260    int index = curs.bit / 64;
 9261    int offset = curs.bit % 64;
 9262    for (; index < curs.n_elems; ++index, offset = 0) {
 9263        u64 rest = curs.elems[index] >> offset;
 9264        if (rest) {
 9265            offset += algo::u64_BitScanForward(rest);
 9266            break;
 9267        }
 9268    }
 9269    curs.bit = index * 64 + offset;
 9270}
 9271
 9272// --- emdi12.FastState..Init
 9273// Set all fields to initial values.
 9274void emdi12::FastState_Init(emdi12::FastState& parent) {
 9275    parent.assigned = u64(0);
 9276    parent.present = u64(0);
 9277    parent.tid = u32(0);
 9278    parent.SenderCompID = u32(0);
 9279    parent.SenderSubID = u32(0);
 9280    parent.MsgSeqNum = u32(0);
 9281    parent.MarketSegmentID = u32(0);
 9282    parent.TransactTime = i64(0);
 9283    parent.SecurityID = i64(0);
 9284    parent.NumberOfOrders = u32(0);
 9285    parent.MDEntryTime = i64(0);
 9286    parent.MDEntryID = u32(0);
 9287    parent.LegSymbol = u32(0);
 9288    parent.LastMsgSeqNumProcessed = u32(0);
 9289    parent.LastUpdateTime = i64(0);
 9290    parent.MDPriceLevel = u32(0);
 9291    parent.RelatedSecurityID = i64(0);
 9292}
 9293
 9294// --- emdi12.FieldId.value.ToCstr
 9295// Convert numeric value of field to one of predefined string constants.
 9296// If string is found, return a static C string. Otherwise, return NULL.
 9297const char* emdi12::value_ToCstr(const emdi12::FieldId& parent) {
 9298    const char *ret = NULL;
 9299    switch(value_GetEnum(parent)) {
 9300        case emdi12_FieldId_value          : ret = "value";  break;
 9301        case emdi12_FieldId_base           : ret = "base";  break;
 9302        case emdi12_FieldId_length         : ret = "length";  break;
 9303        case emdi12_FieldId_id             : ret = "id";  break;
 9304        case emdi12_FieldId_MsgType        : ret = "MsgType";  break;
 9305        case emdi12_FieldId_SenderCompID   : ret = "SenderCompID";  break;
 9306        case emdi12_FieldId_SenderSubID    : ret = "SenderSubID";  break;
 9307        case emdi12_FieldId_LastMsgSeqNumProcessed: ret = "LastMsgSeqNumProcessed";  break;
 9308        case emdi12_FieldId_pmask          : ret = "pmask";  break;
 9309        case emdi12_FieldId_MsgSeqNum      : ret = "MsgSeqNum";  break;
 9310        case emdi12_FieldId_SecurityUpdateAction: ret = "SecurityUpdateAction";  break;
 9311        case emdi12_FieldId_SecurityID     : ret = "SecurityID";  break;
 9312        case emdi12_FieldId_SecurityIDSource: ret = "SecurityIDSource";  break;
 9313        case emdi12_FieldId_SecurityDesc   : ret = "SecurityDesc";  break;
 9314        case emdi12_FieldId_SecurityType   : ret = "SecurityType";  break;
 9315        case emdi12_FieldId_SecuritySubType: ret = "SecuritySubType";  break;
 9316        case emdi12_FieldId_ProductComplex : ret = "ProductComplex";  break;
 9317        case emdi12_FieldId_LegRatioMultiplier: ret = "LegRatioMultiplier";  break;
 9318        case emdi12_FieldId_QuantityScalingFactor: ret = "QuantityScalingFactor";  break;
 9319        case emdi12_FieldId_LastFragment   : ret = "LastFragment";  break;
 9320        case emdi12_FieldId_MarketSegmentGrp1: ret = "MarketSegmentGrp1";  break;
 9321        case emdi12_FieldId_TransactTime   : ret = "TransactTime";  break;
 9322        case emdi12_FieldId_InstrmtLegGrp  : ret = "InstrmtLegGrp";  break;
 9323        case emdi12_FieldId_MarketSegmentID: ret = "MarketSegmentID";  break;
 9324        case emdi12_FieldId_OrderQty       : ret = "OrderQty";  break;
 9325        case emdi12_FieldId_CrossRequestType: ret = "CrossRequestType";  break;
 9326        case emdi12_FieldId_CrossRequestSideGrp: ret = "CrossRequestSideGrp";  break;
 9327        case emdi12_FieldId_MDEntryPx      : ret = "MDEntryPx";  break;
 9328        case emdi12_FieldId_Side           : ret = "Side";  break;
 9329        case emdi12_FieldId_InputSource    : ret = "InputSource";  break;
 9330        case emdi12_FieldId_MDIncGrp1      : ret = "MDIncGrp1";  break;
 9331        case emdi12_FieldId_RefreshIndicator: ret = "RefreshIndicator";  break;
 9332        case emdi12_FieldId_SecurityStatus : ret = "SecurityStatus";  break;
 9333        case emdi12_FieldId_TESSecurityStatus: ret = "TESSecurityStatus";  break;
 9334        case emdi12_FieldId_LastUpdateTime : ret = "LastUpdateTime";  break;
 9335        case emdi12_FieldId_MDSshGrp       : ret = "MDSshGrp";  break;
 9336        case emdi12_FieldId_PartitionID    : ret = "PartitionID";  break;
 9337        case emdi12_FieldId_PacketSeqNum   : ret = "PacketSeqNum";  break;
 9338        case emdi12_FieldId_SendingTime    : ret = "SendingTime";  break;
 9339        case emdi12_FieldId_PerformanceIndicator: ret = "PerformanceIndicator";  break;
 9340        case emdi12_FieldId_MaturityDate   : ret = "MaturityDate";  break;
 9341        case emdi12_FieldId_StrikePrice    : ret = "StrikePrice";  break;
 9342        case emdi12_FieldId_PutOrCall      : ret = "PutOrCall";  break;
 9343        case emdi12_FieldId_OptAttribute   : ret = "OptAttribute";  break;
 9344        case emdi12_FieldId_ExerciseStyle  : ret = "ExerciseStyle";  break;
 9345        case emdi12_FieldId_SettlMethod    : ret = "SettlMethod";  break;
 9346        case emdi12_FieldId_MarketSegmentGrp2: ret = "MarketSegmentGrp2";  break;
 9347        case emdi12_FieldId_LegSymbol      : ret = "LegSymbol";  break;
 9348        case emdi12_FieldId_LegSecurityID  : ret = "LegSecurityID";  break;
 9349        case emdi12_FieldId_LegSecurityIDSource: ret = "LegSecurityIDSource";  break;
 9350        case emdi12_FieldId_LegSecurityType: ret = "LegSecurityType";  break;
 9351        case emdi12_FieldId_LegRatioQty    : ret = "LegRatioQty";  break;
 9352        case emdi12_FieldId_LegSide        : ret = "LegSide";  break;
 9353        case emdi12_FieldId_LegPrice       : ret = "LegPrice";  break;
 9354        case emdi12_FieldId_SecurityTradingStatus: ret = "SecurityTradingStatus";  break;
 9355        case emdi12_FieldId_MarketCondition: ret = "MarketCondition";  break;
 9356        case emdi12_FieldId_FastMarketIndicator: ret = "FastMarketIndicator";  break;
 9357        case emdi12_FieldId_SecurityTradingEvent: ret = "SecurityTradingEvent";  break;
 9358        case emdi12_FieldId_SoldOutIndicator: ret = "SoldOutIndicator";  break;
 9359        case emdi12_FieldId_HighPx         : ret = "HighPx";  break;
 9360        case emdi12_FieldId_LowPx          : ret = "LowPx";  break;
 9361        case emdi12_FieldId_MDOriginType   : ret = "MDOriginType";  break;
 9362        case emdi12_FieldId_MDUpdateAction : ret = "MDUpdateAction";  break;
 9363        case emdi12_FieldId_MDEntryType    : ret = "MDEntryType";  break;
 9364        case emdi12_FieldId_MDEntrySize    : ret = "MDEntrySize";  break;
 9365        case emdi12_FieldId_NumberOfOrders : ret = "NumberOfOrders";  break;
 9366        case emdi12_FieldId_MDPriceLevel   : ret = "MDPriceLevel";  break;
 9367        case emdi12_FieldId_MDEntryTime    : ret = "MDEntryTime";  break;
 9368        case emdi12_FieldId_PotentialSecurityTradingEvent: ret = "PotentialSecurityTradingEvent";  break;
 9369        case emdi12_FieldId_QuoteCondition : ret = "QuoteCondition";  break;
 9370        case emdi12_FieldId_TradeEntryGrp  : ret = "TradeEntryGrp";  break;
 9371        case emdi12_FieldId_MDBookType     : ret = "MDBookType";  break;
 9372        case emdi12_FieldId_MDSubBookType  : ret = "MDSubBookType";  break;
 9373        case emdi12_FieldId_TrdType        : ret = "TrdType";  break;
 9374        case emdi12_FieldId_TradingSessionID: ret = "TradingSessionID";  break;
 9375        case emdi12_FieldId_TradingSessionSubID: ret = "TradingSessionSubID";  break;
 9376        case emdi12_FieldId_TESTradSesStatus: ret = "TESTradSesStatus";  break;
 9377        case emdi12_FieldId_TradeCondition : ret = "TradeCondition";  break;
 9378        case emdi12_FieldId_MultiLegReportingType: ret = "MultiLegReportingType";  break;
 9379        case emdi12_FieldId_MultiLegPriceModel: ret = "MultiLegPriceModel";  break;
 9380        case emdi12_FieldId_NonDisclosedTradeVolume: ret = "NonDisclosedTradeVolume";  break;
 9381        case emdi12_FieldId_TotalNumOfTrades: ret = "TotalNumOfTrades";  break;
 9382        case emdi12_FieldId_ImpliedMarketIndicator: ret = "ImpliedMarketIndicator";  break;
 9383        case emdi12_FieldId_InstrumentScopeProductComplex: ret = "InstrumentScopeProductComplex";  break;
 9384        case emdi12_FieldId_SecurityMassStatus: ret = "SecurityMassStatus";  break;
 9385        case emdi12_FieldId_SecurityMassTradingStatus: ret = "SecurityMassTradingStatus";  break;
 9386        case emdi12_FieldId_MassMarketCondition: ret = "MassMarketCondition";  break;
 9387        case emdi12_FieldId_SecurityMassTradingEvent: ret = "SecurityMassTradingEvent";  break;
 9388        case emdi12_FieldId_MassSoldOutIndicator: ret = "MassSoldOutIndicator";  break;
 9389        case emdi12_FieldId_TESSecurityMassStatus: ret = "TESSecurityMassStatus";  break;
 9390        case emdi12_FieldId_SecMassStatGrp : ret = "SecMassStatGrp";  break;
 9391        case emdi12_FieldId_TradSesStatus  : ret = "TradSesStatus";  break;
 9392        case emdi12_FieldId_QuotReqGrp     : ret = "QuotReqGrp";  break;
 9393        case emdi12_FieldId_RelatedSecurityID: ret = "RelatedSecurityID";  break;
 9394        case emdi12_FieldId_RelatedSecurityIDSource: ret = "RelatedSecurityIDSource";  break;
 9395        case emdi12_FieldId_RelatedInstrumentGrp: ret = "RelatedInstrumentGrp";  break;
 9396        case emdi12_FieldId_MarketSegmentGrp3: ret = "MarketSegmentGrp3";  break;
 9397        case emdi12_FieldId_MDIncGrp2      : ret = "MDIncGrp2";  break;
 9398        case emdi12_FieldId_U              : ret = "U";  break;
 9399        case emdi12_FieldId_R              : ret = "R";  break;
 9400        case emdi12_FieldId_AX             : ret = "AX";  break;
 9401        case emdi12_FieldId_AY             : ret = "AY";  break;
 9402        case emdi12_FieldId_AJ             : ret = "AJ";  break;
 9403        case emdi12_FieldId_AW             : ret = "AW";  break;
 9404        case emdi12_FieldId_k              : ret = "k";  break;
 9405        case emdi12_FieldId_BD             : ret = "BD";  break;
 9406        case emdi12_FieldId_a              : ret = "a";  break;
 9407        case emdi12_FieldId_BC             : ret = "BC";  break;
 9408        case emdi12_FieldId_SA             : ret = "SA";  break;
 9409        case emdi12_FieldId_TC             : ret = "TC";  break;
 9410        case emdi12_FieldId_XR             : ret = "XR";  break;
 9411        case emdi12_FieldId_AlgorithmicTradeIndicator: ret = "AlgorithmicTradeIndicator";  break;
 9412        case emdi12_FieldId_AggressorTime  : ret = "AggressorTime";  break;
 9413        case emdi12_FieldId_RequestTime    : ret = "RequestTime";  break;
 9414        case emdi12_FieldId_AggressorSide  : ret = "AggressorSide";  break;
 9415        case emdi12_FieldId_NumberOfBuyOrders: ret = "NumberOfBuyOrders";  break;
 9416        case emdi12_FieldId_NumberOfSellOrders: ret = "NumberOfSellOrders";  break;
 9417        case emdi12_FieldId_RestingCxlQty  : ret = "RestingCxlQty";  break;
 9418        case emdi12_FieldId_MDEntryID      : ret = "MDEntryID";  break;
 9419    }
 9420    return ret;
 9421}
 9422
 9423// --- emdi12.FieldId.value.Print
 9424// Convert value to a string. First, attempt conversion to a known string.
 9425// If no string matches, print value as a numeric value.
 9426void emdi12::value_Print(const emdi12::FieldId& parent, algo::cstring &lhs) {
 9427    const char *strval = value_ToCstr(parent);
 9428    if (strval) {
 9429        lhs << strval;
 9430    } else {
 9431        lhs << parent.value;
 9432    }
 9433}
 9434
 9435// --- emdi12.FieldId.value.SetStrptrMaybe
 9436// Convert string to field.
 9437// If the string is invalid, do not modify field and return false.
 9438// In case of success, return true
 9439bool emdi12::value_SetStrptrMaybe(emdi12::FieldId& parent, algo::strptr rhs) {
 9440    bool ret = false;
 9441    switch (elems_N(rhs)) {
 9442        case 1: {
 9443            switch (u64(rhs[0])) {
 9444                case 'R': {
 9445                    value_SetEnum(parent,emdi12_FieldId_R); ret = true; break;
 9446                }
 9447                case 'U': {
 9448                    value_SetEnum(parent,emdi12_FieldId_U); ret = true; break;
 9449                }
 9450                case 'a': {
 9451                    value_SetEnum(parent,emdi12_FieldId_a); ret = true; break;
 9452                }
 9453                case 'k': {
 9454                    value_SetEnum(parent,emdi12_FieldId_k); ret = true; break;
 9455                }
 9456            }
 9457            break;
 9458        }
 9459        case 2: {
 9460            switch (u64(algo::ReadLE16(rhs.elems))) {
 9461                case LE_STR2('A','J'): {
 9462                    value_SetEnum(parent,emdi12_FieldId_AJ); ret = true; break;
 9463                }
 9464                case LE_STR2('A','W'): {
 9465                    value_SetEnum(parent,emdi12_FieldId_AW); ret = true; break;
 9466                }
 9467                case LE_STR2('A','X'): {
 9468                    value_SetEnum(parent,emdi12_FieldId_AX); ret = true; break;
 9469                }
 9470                case LE_STR2('A','Y'): {
 9471                    value_SetEnum(parent,emdi12_FieldId_AY); ret = true; break;
 9472                }
 9473                case LE_STR2('B','C'): {
 9474                    value_SetEnum(parent,emdi12_FieldId_BC); ret = true; break;
 9475                }
 9476                case LE_STR2('B','D'): {
 9477                    value_SetEnum(parent,emdi12_FieldId_BD); ret = true; break;
 9478                }
 9479                case LE_STR2('S','A'): {
 9480                    value_SetEnum(parent,emdi12_FieldId_SA); ret = true; break;
 9481                }
 9482                case LE_STR2('T','C'): {
 9483                    value_SetEnum(parent,emdi12_FieldId_TC); ret = true; break;
 9484                }
 9485                case LE_STR2('X','R'): {
 9486                    value_SetEnum(parent,emdi12_FieldId_XR); ret = true; break;
 9487                }
 9488                case LE_STR2('i','d'): {
 9489                    value_SetEnum(parent,emdi12_FieldId_id); ret = true; break;
 9490                }
 9491            }
 9492            break;
 9493        }
 9494        case 4: {
 9495            switch (u64(algo::ReadLE32(rhs.elems))) {
 9496                case LE_STR4('S','i','d','e'): {
 9497                    value_SetEnum(parent,emdi12_FieldId_Side); ret = true; break;
 9498                }
 9499                case LE_STR4('b','a','s','e'): {
 9500                    value_SetEnum(parent,emdi12_FieldId_base); ret = true; break;
 9501                }
 9502            }
 9503            break;
 9504        }
 9505        case 5: {
 9506            switch (u64(algo::ReadLE32(rhs.elems))|(u64(rhs[4])<<32)) {
 9507                case LE_STR5('L','o','w','P','x'): {
 9508                    value_SetEnum(parent,emdi12_FieldId_LowPx); ret = true; break;
 9509                }
 9510                case LE_STR5('p','m','a','s','k'): {
 9511                    value_SetEnum(parent,emdi12_FieldId_pmask); ret = true; break;
 9512                }
 9513                case LE_STR5('v','a','l','u','e'): {
 9514                    value_SetEnum(parent,emdi12_FieldId_value); ret = true; break;
 9515                }
 9516            }
 9517            break;
 9518        }
 9519        case 6: {
 9520            switch (u64(algo::ReadLE32(rhs.elems))|(u64(algo::ReadLE16(rhs.elems+4))<<32)) {
 9521                case LE_STR6('H','i','g','h','P','x'): {
 9522                    value_SetEnum(parent,emdi12_FieldId_HighPx); ret = true; break;
 9523                }
 9524                case LE_STR6('l','e','n','g','t','h'): {
 9525                    value_SetEnum(parent,emdi12_FieldId_length); ret = true; break;
 9526                }
 9527            }
 9528            break;
 9529        }
 9530        case 7: {
 9531            switch (u64(algo::ReadLE32(rhs.elems))|(u64(algo::ReadLE16(rhs.elems+4))<<32)|(u64(rhs[6])<<48)) {
 9532                case LE_STR7('L','e','g','S','i','d','e'): {
 9533                    value_SetEnum(parent,emdi12_FieldId_LegSide); ret = true; break;
 9534                }
 9535                case LE_STR7('M','s','g','T','y','p','e'): {
 9536                    value_SetEnum(parent,emdi12_FieldId_MsgType); ret = true; break;
 9537                }
 9538                case LE_STR7('T','r','d','T','y','p','e'): {
 9539                    value_SetEnum(parent,emdi12_FieldId_TrdType); ret = true; break;
 9540                }
 9541            }
 9542            break;
 9543        }
 9544        case 8: {
 9545            switch (algo::ReadLE64(rhs.elems)) {
 9546                case LE_STR8('L','e','g','P','r','i','c','e'): {
 9547                    value_SetEnum(parent,emdi12_FieldId_LegPrice); ret = true; break;
 9548                }
 9549                case LE_STR8('M','D','S','s','h','G','r','p'): {
 9550                    value_SetEnum(parent,emdi12_FieldId_MDSshGrp); ret = true; break;
 9551                }
 9552                case LE_STR8('O','r','d','e','r','Q','t','y'): {
 9553                    value_SetEnum(parent,emdi12_FieldId_OrderQty); ret = true; break;
 9554                }
 9555            }
 9556            break;
 9557        }
 9558        case 9: {
 9559            switch (algo::ReadLE64(rhs.elems)) {
 9560                case LE_STR8('L','e','g','S','y','m','b','o'): {
 9561                    if (memcmp(rhs.elems+8,"l",1)==0) { value_SetEnum(parent,emdi12_FieldId_LegSymbol); ret = true; break; }
 9562                    break;
 9563                }
 9564                case LE_STR8('M','D','E','n','t','r','y','I'): {
 9565                    if (memcmp(rhs.elems+8,"D",1)==0) { value_SetEnum(parent,emdi12_FieldId_MDEntryID); ret = true; break; }
 9566                    break;
 9567                }
 9568                case LE_STR8('M','D','E','n','t','r','y','P'): {
 9569                    if (memcmp(rhs.elems+8,"x",1)==0) { value_SetEnum(parent,emdi12_FieldId_MDEntryPx); ret = true; break; }
 9570                    break;
 9571                }
 9572                case LE_STR8('M','D','I','n','c','G','r','p'): {
 9573                    if (memcmp(rhs.elems+8,"1",1)==0) { value_SetEnum(parent,emdi12_FieldId_MDIncGrp1); ret = true; break; }
 9574                    if (memcmp(rhs.elems+8,"2",1)==0) { value_SetEnum(parent,emdi12_FieldId_MDIncGrp2); ret = true; break; }
 9575                    break;
 9576                }
 9577                case LE_STR8('M','s','g','S','e','q','N','u'): {
 9578                    if (memcmp(rhs.elems+8,"m",1)==0) { value_SetEnum(parent,emdi12_FieldId_MsgSeqNum); ret = true; break; }
 9579                    break;
 9580                }
 9581                case LE_STR8('P','u','t','O','r','C','a','l'): {
 9582                    if (memcmp(rhs.elems+8,"l",1)==0) { value_SetEnum(parent,emdi12_FieldId_PutOrCall); ret = true; break; }
 9583                    break;
 9584                }
 9585            }
 9586            break;
 9587        }
 9588        case 10: {
 9589            switch (algo::ReadLE64(rhs.elems)) {
 9590                case LE_STR8('M','D','B','o','o','k','T','y'): {
 9591                    if (memcmp(rhs.elems+8,"pe",2)==0) { value_SetEnum(parent,emdi12_FieldId_MDBookType); ret = true; break; }
 9592                    break;
 9593                }
 9594                case LE_STR8('Q','u','o','t','R','e','q','G'): {
 9595                    if (memcmp(rhs.elems+8,"rp",2)==0) { value_SetEnum(parent,emdi12_FieldId_QuotReqGrp); ret = true; break; }
 9596                    break;
 9597                }
 9598                case LE_STR8('S','e','c','u','r','i','t','y'): {
 9599                    if (memcmp(rhs.elems+8,"ID",2)==0) { value_SetEnum(parent,emdi12_FieldId_SecurityID); ret = true; break; }
 9600                    break;
 9601                }
 9602            }
 9603            break;
 9604        }
 9605        case 11: {
 9606            switch (algo::ReadLE64(rhs.elems)) {
 9607                case LE_STR8('I','n','p','u','t','S','o','u'): {
 9608                    if (memcmp(rhs.elems+8,"rce",3)==0) { value_SetEnum(parent,emdi12_FieldId_InputSource); ret = true; break; }
 9609                    break;
 9610                }
 9611                case LE_STR8('L','e','g','R','a','t','i','o'): {
 9612                    if (memcmp(rhs.elems+8,"Qty",3)==0) { value_SetEnum(parent,emdi12_FieldId_LegRatioQty); ret = true; break; }
 9613                    break;
 9614                }
 9615                case LE_STR8('M','D','E','n','t','r','y','S'): {
 9616                    if (memcmp(rhs.elems+8,"ize",3)==0) { value_SetEnum(parent,emdi12_FieldId_MDEntrySize); ret = true; break; }
 9617                    break;
 9618                }
 9619                case LE_STR8('M','D','E','n','t','r','y','T'): {
 9620                    if (memcmp(rhs.elems+8,"ype",3)==0) { value_SetEnum(parent,emdi12_FieldId_MDEntryType); ret = true; break; }
 9621                    if (memcmp(rhs.elems+8,"ime",3)==0) { value_SetEnum(parent,emdi12_FieldId_MDEntryTime); ret = true; break; }
 9622                    break;
 9623                }
 9624                case LE_STR8('P','a','r','t','i','t','i','o'): {
 9625                    if (memcmp(rhs.elems+8,"nID",3)==0) { value_SetEnum(parent,emdi12_FieldId_PartitionID); ret = true; break; }
 9626                    break;
 9627                }
 9628                case LE_STR8('R','e','q','u','e','s','t','T'): {
 9629                    if (memcmp(rhs.elems+8,"ime",3)==0) { value_SetEnum(parent,emdi12_FieldId_RequestTime); ret = true; break; }
 9630                    break;
 9631                }
 9632                case LE_STR8('S','e','n','d','e','r','S','u'): {
 9633                    if (memcmp(rhs.elems+8,"bID",3)==0) { value_SetEnum(parent,emdi12_FieldId_SenderSubID); ret = true; break; }
 9634                    break;
 9635                }
 9636                case LE_STR8('S','e','n','d','i','n','g','T'): {
 9637                    if (memcmp(rhs.elems+8,"ime",3)==0) { value_SetEnum(parent,emdi12_FieldId_SendingTime); ret = true; break; }
 9638                    break;
 9639                }
 9640                case LE_STR8('S','e','t','t','l','M','e','t'): {
 9641                    if (memcmp(rhs.elems+8,"hod",3)==0) { value_SetEnum(parent,emdi12_FieldId_SettlMethod); ret = true; break; }
 9642                    break;
 9643                }
 9644                case LE_STR8('S','t','r','i','k','e','P','r'): {
 9645                    if (memcmp(rhs.elems+8,"ice",3)==0) { value_SetEnum(parent,emdi12_FieldId_StrikePrice); ret = true; break; }
 9646                    break;
 9647                }
 9648            }
 9649            break;
 9650        }
 9651        case 12: {
 9652            switch (algo::ReadLE64(rhs.elems)) {
 9653                case LE_STR8('L','a','s','t','F','r','a','g'): {
 9654                    if (memcmp(rhs.elems+8,"ment",4)==0) { value_SetEnum(parent,emdi12_FieldId_LastFragment); ret = true; break; }
 9655                    break;
 9656                }
 9657                case LE_STR8('M','D','O','r','i','g','i','n'): {
 9658                    if (memcmp(rhs.elems+8,"Type",4)==0) { value_SetEnum(parent,emdi12_FieldId_MDOriginType); ret = true; break; }
 9659                    break;
 9660                }
 9661                case LE_STR8('M','D','P','r','i','c','e','L'): {
 9662                    if (memcmp(rhs.elems+8,"evel",4)==0) { value_SetEnum(parent,emdi12_FieldId_MDPriceLevel); ret = true; break; }
 9663                    break;
 9664                }
 9665                case LE_STR8('M','a','t','u','r','i','t','y'): {
 9666                    if (memcmp(rhs.elems+8,"Date",4)==0) { value_SetEnum(parent,emdi12_FieldId_MaturityDate); ret = true; break; }
 9667                    break;
 9668                }
 9669                case LE_STR8('O','p','t','A','t','t','r','i'): {
 9670                    if (memcmp(rhs.elems+8,"bute",4)==0) { value_SetEnum(parent,emdi12_FieldId_OptAttribute); ret = true; break; }
 9671                    break;
 9672                }
 9673                case LE_STR8('P','a','c','k','e','t','S','e'): {
 9674                    if (memcmp(rhs.elems+8,"qNum",4)==0) { value_SetEnum(parent,emdi12_FieldId_PacketSeqNum); ret = true; break; }
 9675                    break;
 9676                }
 9677                case LE_STR8('S','e','c','u','r','i','t','y'): {
 9678                    if (memcmp(rhs.elems+8,"Desc",4)==0) { value_SetEnum(parent,emdi12_FieldId_SecurityDesc); ret = true; break; }
 9679                    if (memcmp(rhs.elems+8,"Type",4)==0) { value_SetEnum(parent,emdi12_FieldId_SecurityType); ret = true; break; }
 9680                    break;
 9681                }
 9682                case LE_STR8('S','e','n','d','e','r','C','o'): {
 9683                    if (memcmp(rhs.elems+8,"mpID",4)==0) { value_SetEnum(parent,emdi12_FieldId_SenderCompID); ret = true; break; }
 9684                    break;
 9685                }
 9686                case LE_STR8('T','r','a','n','s','a','c','t'): {
 9687                    if (memcmp(rhs.elems+8,"Time",4)==0) { value_SetEnum(parent,emdi12_FieldId_TransactTime); ret = true; break; }
 9688                    break;
 9689                }
 9690            }
 9691            break;
 9692        }
 9693        case 13: {
 9694            switch (algo::ReadLE64(rhs.elems)) {
 9695                case LE_STR8('A','g','g','r','e','s','s','o'): {
 9696                    if (memcmp(rhs.elems+8,"rTime",5)==0) { value_SetEnum(parent,emdi12_FieldId_AggressorTime); ret = true; break; }
 9697                    if (memcmp(rhs.elems+8,"rSide",5)==0) { value_SetEnum(parent,emdi12_FieldId_AggressorSide); ret = true; break; }
 9698                    break;
 9699                }
 9700                case LE_STR8('E','x','e','r','c','i','s','e'): {
 9701                    if (memcmp(rhs.elems+8,"Style",5)==0) { value_SetEnum(parent,emdi12_FieldId_ExerciseStyle); ret = true; break; }
 9702                    break;
 9703                }
 9704                case LE_STR8('I','n','s','t','r','m','t','L'): {
 9705                    if (memcmp(rhs.elems+8,"egGrp",5)==0) { value_SetEnum(parent,emdi12_FieldId_InstrmtLegGrp); ret = true; break; }
 9706                    break;
 9707                }
 9708                case LE_STR8('L','e','g','S','e','c','u','r'): {
 9709                    if (memcmp(rhs.elems+8,"ityID",5)==0) { value_SetEnum(parent,emdi12_FieldId_LegSecurityID); ret = true; break; }
 9710                    break;
 9711                }
 9712                case LE_STR8('M','D','S','u','b','B','o','o'): {
 9713                    if (memcmp(rhs.elems+8,"kType",5)==0) { value_SetEnum(parent,emdi12_FieldId_MDSubBookType); ret = true; break; }
 9714                    break;
 9715                }
 9716                case LE_STR8('R','e','s','t','i','n','g','C'): {
 9717                    if (memcmp(rhs.elems+8,"xlQty",5)==0) { value_SetEnum(parent,emdi12_FieldId_RestingCxlQty); ret = true; break; }
 9718                    break;
 9719                }
 9720                case LE_STR8('T','r','a','d','S','e','s','S'): {
 9721                    if (memcmp(rhs.elems+8,"tatus",5)==0) { value_SetEnum(parent,emdi12_FieldId_TradSesStatus); ret = true; break; }
 9722                    break;
 9723                }
 9724                case LE_STR8('T','r','a','d','e','E','n','t'): {
 9725                    if (memcmp(rhs.elems+8,"ryGrp",5)==0) { value_SetEnum(parent,emdi12_FieldId_TradeEntryGrp); ret = true; break; }
 9726                    break;
 9727                }
 9728            }
 9729            break;
 9730        }
 9731        case 14: {
 9732            switch (algo::ReadLE64(rhs.elems)) {
 9733                case LE_STR8('L','a','s','t','U','p','d','a'): {
 9734                    if (memcmp(rhs.elems+8,"teTime",6)==0) { value_SetEnum(parent,emdi12_FieldId_LastUpdateTime); ret = true; break; }
 9735                    break;
 9736                }
 9737                case LE_STR8('M','D','U','p','d','a','t','e'): {
 9738                    if (memcmp(rhs.elems+8,"Action",6)==0) { value_SetEnum(parent,emdi12_FieldId_MDUpdateAction); ret = true; break; }
 9739                    break;
 9740                }
 9741                case LE_STR8('N','u','m','b','e','r','O','f'): {
 9742                    if (memcmp(rhs.elems+8,"Orders",6)==0) { value_SetEnum(parent,emdi12_FieldId_NumberOfOrders); ret = true; break; }
 9743                    break;
 9744                }
 9745                case LE_STR8('P','r','o','d','u','c','t','C'): {
 9746                    if (memcmp(rhs.elems+8,"omplex",6)==0) { value_SetEnum(parent,emdi12_FieldId_ProductComplex); ret = true; break; }
 9747                    break;
 9748                }
 9749                case LE_STR8('Q','u','o','t','e','C','o','n'): {
 9750                    if (memcmp(rhs.elems+8,"dition",6)==0) { value_SetEnum(parent,emdi12_FieldId_QuoteCondition); ret = true; break; }
 9751                    break;
 9752                }
 9753                case LE_STR8('S','e','c','M','a','s','s','S'): {
 9754                    if (memcmp(rhs.elems+8,"tatGrp",6)==0) { value_SetEnum(parent,emdi12_FieldId_SecMassStatGrp); ret = true; break; }
 9755                    break;
 9756                }
 9757                case LE_STR8('S','e','c','u','r','i','t','y'): {
 9758                    if (memcmp(rhs.elems+8,"Status",6)==0) { value_SetEnum(parent,emdi12_FieldId_SecurityStatus); ret = true; break; }
 9759                    break;
 9760                }
 9761                case LE_STR8('T','r','a','d','e','C','o','n'): {
 9762                    if (memcmp(rhs.elems+8,"dition",6)==0) { value_SetEnum(parent,emdi12_FieldId_TradeCondition); ret = true; break; }
 9763                    break;
 9764                }
 9765            }
 9766            break;
 9767        }
 9768        case 15: {
 9769            switch (algo::ReadLE64(rhs.elems)) {
 9770                case LE_STR8('L','e','g','S','e','c','u','r'): {
 9771                    if (memcmp(rhs.elems+8,"ityType",7)==0) { value_SetEnum(parent,emdi12_FieldId_LegSecurityType); ret = true; break; }
 9772                    break;
 9773                }
 9774                case LE_STR8('M','a','r','k','e','t','C','o'): {
 9775                    if (memcmp(rhs.elems+8,"ndition",7)==0) { value_SetEnum(parent,emdi12_FieldId_MarketCondition); ret = true; break; }
 9776                    break;
 9777                }
 9778                case LE_STR8('M','a','r','k','e','t','S','e'): {
 9779                    if (memcmp(rhs.elems+8,"gmentID",7)==0) { value_SetEnum(parent,emdi12_FieldId_MarketSegmentID); ret = true; break; }
 9780                    break;
 9781                }
 9782                case LE_STR8('S','e','c','u','r','i','t','y'): {
 9783                    if (memcmp(rhs.elems+8,"SubType",7)==0) { value_SetEnum(parent,emdi12_FieldId_SecuritySubType); ret = true; break; }
 9784                    break;
 9785                }
 9786            }
 9787            break;
 9788        }
 9789        case 16: {
 9790            switch (algo::ReadLE64(rhs.elems)) {
 9791                case LE_STR8('C','r','o','s','s','R','e','q'): {
 9792                    if (memcmp(rhs.elems+8,"uestType",8)==0) { value_SetEnum(parent,emdi12_FieldId_CrossRequestType); ret = true; break; }
 9793                    break;
 9794                }
 9795                case LE_STR8('R','e','f','r','e','s','h','I'): {
 9796                    if (memcmp(rhs.elems+8,"ndicator",8)==0) { value_SetEnum(parent,emdi12_FieldId_RefreshIndicator); ret = true; break; }
 9797                    break;
 9798                }
 9799                case LE_STR8('S','e','c','u','r','i','t','y'): {
 9800                    if (memcmp(rhs.elems+8,"IDSource",8)==0) { value_SetEnum(parent,emdi12_FieldId_SecurityIDSource); ret = true; break; }
 9801                    break;
 9802                }
 9803                case LE_STR8('S','o','l','d','O','u','t','I'): {
 9804                    if (memcmp(rhs.elems+8,"ndicator",8)==0) { value_SetEnum(parent,emdi12_FieldId_SoldOutIndicator); ret = true; break; }
 9805                    break;
 9806                }
 9807                case LE_STR8('T','E','S','T','r','a','d','S'): {
 9808                    if (memcmp(rhs.elems+8,"esStatus",8)==0) { value_SetEnum(parent,emdi12_FieldId_TESTradSesStatus); ret = true; break; }
 9809                    break;
 9810                }
 9811                case LE_STR8('T','o','t','a','l','N','u','m'): {
 9812                    if (memcmp(rhs.elems+8,"OfTrades",8)==0) { value_SetEnum(parent,emdi12_FieldId_TotalNumOfTrades); ret = true; break; }
 9813                    break;
 9814                }
 9815                case LE_STR8('T','r','a','d','i','n','g','S'): {
 9816                    if (memcmp(rhs.elems+8,"essionID",8)==0) { value_SetEnum(parent,emdi12_FieldId_TradingSessionID); ret = true; break; }
 9817                    break;
 9818                }
 9819            }
 9820            break;
 9821        }
 9822        case 17: {
 9823            switch (algo::ReadLE64(rhs.elems)) {
 9824                case LE_STR8('M','a','r','k','e','t','S','e'): {
 9825                    if (memcmp(rhs.elems+8,"gmentGrp1",9)==0) { value_SetEnum(parent,emdi12_FieldId_MarketSegmentGrp1); ret = true; break; }
 9826                    if (memcmp(rhs.elems+8,"gmentGrp2",9)==0) { value_SetEnum(parent,emdi12_FieldId_MarketSegmentGrp2); ret = true; break; }
 9827                    if (memcmp(rhs.elems+8,"gmentGrp3",9)==0) { value_SetEnum(parent,emdi12_FieldId_MarketSegmentGrp3); ret = true; break; }
 9828                    break;
 9829                }
 9830                case LE_STR8('N','u','m','b','e','r','O','f'): {
 9831                    if (memcmp(rhs.elems+8,"BuyOrders",9)==0) { value_SetEnum(parent,emdi12_FieldId_NumberOfBuyOrders); ret = true; break; }
 9832                    break;
 9833                }
 9834                case LE_STR8('R','e','l','a','t','e','d','S'): {
 9835                    if (memcmp(rhs.elems+8,"ecurityID",9)==0) { value_SetEnum(parent,emdi12_FieldId_RelatedSecurityID); ret = true; break; }
 9836                    break;
 9837                }
 9838                case LE_STR8('T','E','S','S','e','c','u','r'): {
 9839                    if (memcmp(rhs.elems+8,"ityStatus",9)==0) { value_SetEnum(parent,emdi12_FieldId_TESSecurityStatus); ret = true; break; }
 9840                    break;
 9841                }
 9842            }
 9843            break;
 9844        }
 9845        case 18: {
 9846            switch (algo::ReadLE64(rhs.elems)) {
 9847                case LE_STR8('L','e','g','R','a','t','i','o'): {
 9848                    if (memcmp(rhs.elems+8,"Multiplier",10)==0) { value_SetEnum(parent,emdi12_FieldId_LegRatioMultiplier); ret = true; break; }
 9849                    break;
 9850                }
 9851                case LE_STR8('M','u','l','t','i','L','e','g'): {
 9852                    if (memcmp(rhs.elems+8,"PriceModel",10)==0) { value_SetEnum(parent,emdi12_FieldId_MultiLegPriceModel); ret = true; break; }
 9853                    break;
 9854                }
 9855                case LE_STR8('N','u','m','b','e','r','O','f'): {
 9856                    if (memcmp(rhs.elems+8,"SellOrders",10)==0) { value_SetEnum(parent,emdi12_FieldId_NumberOfSellOrders); ret = true; break; }
 9857                    break;
 9858                }
 9859                case LE_STR8('S','e','c','u','r','i','t','y'): {
 9860                    if (memcmp(rhs.elems+8,"MassStatus",10)==0) { value_SetEnum(parent,emdi12_FieldId_SecurityMassStatus); ret = true; break; }
 9861                    break;
 9862                }
 9863            }
 9864            break;
 9865        }
 9866        case 19: {
 9867            switch (algo::ReadLE64(rhs.elems)) {
 9868                case LE_STR8('C','r','o','s','s','R','e','q'): {
 9869                    if (memcmp(rhs.elems+8,"uestSideGrp",11)==0) { value_SetEnum(parent,emdi12_FieldId_CrossRequestSideGrp); ret = true; break; }
 9870                    break;
 9871                }
 9872                case LE_STR8('F','a','s','t','M','a','r','k'): {
 9873                    if (memcmp(rhs.elems+8,"etIndicator",11)==0) { value_SetEnum(parent,emdi12_FieldId_FastMarketIndicator); ret = true; break; }
 9874                    break;
 9875                }
 9876                case LE_STR8('L','e','g','S','e','c','u','r'): {
 9877                    if (memcmp(rhs.elems+8,"ityIDSource",11)==0) { value_SetEnum(parent,emdi12_FieldId_LegSecurityIDSource); ret = true; break; }
 9878                    break;
 9879                }
 9880                case LE_STR8('M','a','s','s','M','a','r','k'): {
 9881                    if (memcmp(rhs.elems+8,"etCondition",11)==0) { value_SetEnum(parent,emdi12_FieldId_MassMarketCondition); ret = true; break; }
 9882                    break;
 9883                }
 9884                case LE_STR8('T','r','a','d','i','n','g','S'): {
 9885                    if (memcmp(rhs.elems+8,"essionSubID",11)==0) { value_SetEnum(parent,emdi12_FieldId_TradingSessionSubID); ret = true; break; }
 9886                    break;
 9887                }
 9888            }
 9889            break;
 9890        }
 9891        case 20: {
 9892            switch (algo::ReadLE64(rhs.elems)) {
 9893                case LE_STR8('M','a','s','s','S','o','l','d'): {
 9894                    if (memcmp(rhs.elems+8,"OutIndicator",12)==0) { value_SetEnum(parent,emdi12_FieldId_MassSoldOutIndicator); ret = true; break; }
 9895                    break;
 9896                }
 9897                case LE_STR8('P','e','r','f','o','r','m','a'): {
 9898                    if (memcmp(rhs.elems+8,"nceIndicator",12)==0) { value_SetEnum(parent,emdi12_FieldId_PerformanceIndicator); ret = true; break; }
 9899                    break;
 9900                }
 9901                case LE_STR8('R','e','l','a','t','e','d','I'): {
 9902                    if (memcmp(rhs.elems+8,"nstrumentGrp",12)==0) { value_SetEnum(parent,emdi12_FieldId_RelatedInstrumentGrp); ret = true; break; }
 9903                    break;
 9904                }
 9905                case LE_STR8('S','e','c','u','r','i','t','y'): {
 9906                    if (memcmp(rhs.elems+8,"UpdateAction",12)==0) { value_SetEnum(parent,emdi12_FieldId_SecurityUpdateAction); ret = true; break; }
 9907                    if (memcmp(rhs.elems+8,"TradingEvent",12)==0) { value_SetEnum(parent,emdi12_FieldId_SecurityTradingEvent); ret = true; break; }
 9908                    break;
 9909                }
 9910            }
 9911            break;
 9912        }
 9913        case 21: {
 9914            switch (algo::ReadLE64(rhs.elems)) {
 9915                case LE_STR8('M','u','l','t','i','L','e','g'): {
 9916                    if (memcmp(rhs.elems+8,"ReportingType",13)==0) { value_SetEnum(parent,emdi12_FieldId_MultiLegReportingType); ret = true; break; }
 9917                    break;
 9918                }
 9919                case LE_STR8('Q','u','a','n','t','i','t','y'): {
 9920                    if (memcmp(rhs.elems+8,"ScalingFactor",13)==0) { value_SetEnum(parent,emdi12_FieldId_QuantityScalingFactor); ret = true; break; }
 9921                    break;
 9922                }
 9923                case LE_STR8('S','e','c','u','r','i','t','y'): {
 9924                    if (memcmp(rhs.elems+8,"TradingStatus",13)==0) { value_SetEnum(parent,emdi12_FieldId_SecurityTradingStatus); ret = true; break; }
 9925                    break;
 9926                }
 9927                case LE_STR8('T','E','S','S','e','c','u','r'): {
 9928                    if (memcmp(rhs.elems+8,"ityMassStatus",13)==0) { value_SetEnum(parent,emdi12_FieldId_TESSecurityMassStatus); ret = true; break; }
 9929                    break;
 9930                }
 9931            }
 9932            break;
 9933        }
 9934        case 22: {
 9935            switch (algo::ReadLE64(rhs.elems)) {
 9936                case LE_STR8('I','m','p','l','i','e','d','M'): {
 9937                    if (memcmp(rhs.elems+8,"arketIndicator",14)==0) { value_SetEnum(parent,emdi12_FieldId_ImpliedMarketIndicator); ret = true; break; }
 9938                    break;
 9939                }
 9940                case LE_STR8('L','a','s','t','M','s','g','S'): {
 9941                    if (memcmp(rhs.elems+8,"eqNumProcessed",14)==0) { value_SetEnum(parent,emdi12_FieldId_LastMsgSeqNumProcessed); ret = true; break; }
 9942                    break;
 9943                }
 9944            }
 9945            break;
 9946        }
 9947        case 23: {
 9948            switch (algo::ReadLE64(rhs.elems)) {
 9949                case LE_STR8('N','o','n','D','i','s','c','l'): {
 9950                    if (memcmp(rhs.elems+8,"osedTradeVolume",15)==0) { value_SetEnum(parent,emdi12_FieldId_NonDisclosedTradeVolume); ret = true; break; }
 9951                    break;
 9952                }
 9953                case LE_STR8('R','e','l','a','t','e','d','S'): {
 9954                    if (memcmp(rhs.elems+8,"ecurityIDSource",15)==0) { value_SetEnum(parent,emdi12_FieldId_RelatedSecurityIDSource); ret = true; break; }
 9955                    break;
 9956                }
 9957            }
 9958            break;
 9959        }
 9960        case 24: {
 9961            switch (algo::ReadLE64(rhs.elems)) {
 9962                case LE_STR8('S','e','c','u','r','i','t','y'): {
 9963                    if (memcmp(rhs.elems+8,"MassTradingEvent",16)==0) { value_SetEnum(parent,emdi12_FieldId_SecurityMassTradingEvent); ret = true; break; }
 9964                    break;
 9965                }
 9966            }
 9967            break;
 9968        }
 9969        case 25: {
 9970            switch (algo::ReadLE64(rhs.elems)) {
 9971                case LE_STR8('A','l','g','o','r','i','t','h'): {
 9972                    if (memcmp(rhs.elems+8,"micTradeIndicator",17)==0) { value_SetEnum(parent,emdi12_FieldId_AlgorithmicTradeIndicator); ret = true; break; }
 9973                    break;
 9974                }
 9975                case LE_STR8('S','e','c','u','r','i','t','y'): {
 9976                    if (memcmp(rhs.elems+8,"MassTradingStatus",17)==0) { value_SetEnum(parent,emdi12_FieldId_SecurityMassTradingStatus); ret = true; break; }
 9977                    break;
 9978                }
 9979            }
 9980            break;
 9981        }
 9982        case 29: {
 9983            switch (algo::ReadLE64(rhs.elems)) {
 9984                case LE_STR8('I','n','s','t','r','u','m','e'): {
 9985                    if (memcmp(rhs.elems+8,"ntScopeProductComplex",21)==0) { value_SetEnum(parent,emdi12_FieldId_InstrumentScopeProductComplex); ret = true; break; }
 9986                    break;
 9987                }
 9988                case LE_STR8('P','o','t','e','n','t','i','a'): {
 9989                    if (memcmp(rhs.elems+8,"lSecurityTradingEvent",21)==0) { value_SetEnum(parent,emdi12_FieldId_PotentialSecurityTradingEvent); ret = true; break; }
 9990                    break;
 9991                }
 9992            }
 9993            break;
 9994        }
 9995    }
 9996    return ret;
 9997}
 9998
 9999// --- emdi12.FieldId.value.SetStrptr
10000// Convert string to field.
10001// If the string is invalid, set numeric value to DFLT
10002void emdi12::value_SetStrptr(emdi12::FieldId& parent, algo::strptr rhs, emdi12_FieldIdEnum dflt) {
10003    if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
10004}
10005
10006// --- emdi12.FieldId.value.ReadStrptrMaybe
10007// Convert string to field. Return success value
10008bool emdi12::value_ReadStrptrMaybe(emdi12::FieldId& parent, algo::strptr rhs) {
10009    bool retval = false;
10010    retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
10011    if (!retval) { // didn't work? try reading as underlying type
10012        retval = i32_ReadStrptrMaybe(parent.value,rhs);
10013    }
10014    return retval;
10015}
10016
10017// --- emdi12.FieldId..ReadStrptrMaybe
10018// Read fields of emdi12::FieldId from an ascii string.
10019// The format of the string is the format of the emdi12::FieldId's only field
10020bool emdi12::FieldId_ReadStrptrMaybe(emdi12::FieldId &parent, algo::strptr in_str) {
10021    bool retval = true;
10022    retval = retval && value_ReadStrptrMaybe(parent, in_str);
10023    return retval;
10024}
10025
10026// --- emdi12.FieldId..Print
10027// print string representation of ROW to string STR
10028// cfmt:emdi12.FieldId.String  printfmt:Raw
10029void emdi12::FieldId_Print(emdi12::FieldId& row, algo::cstring& str) {
10030    emdi12::value_Print(row, str);
10031}
10032
10033// --- emdi12.PutOrCall.value.ToCstr
10034// Convert numeric value of field to one of predefined string constants.
10035// If string is found, return a static C string. Otherwise, return NULL.
10036const char* emdi12::value_ToCstr(const emdi12::PutOrCall& parent) {
10037    const char *ret = NULL;
10038    switch(value_GetEnum(parent)) {
10039        case emdi12_PutOrCall_0            : ret = "0";  break;
10040        case emdi12_PutOrCall_1            : ret = "1";  break;
10041    }
10042    return ret;
10043}
10044
10045// --- emdi12.PutOrCall.value.Print
10046// Convert value to a string. First, attempt conversion to a known string.
10047// If no string matches, print value as a numeric value.
10048void emdi12::value_Print(const emdi12::PutOrCall& parent, algo::cstring &lhs) {
10049    const char *strval = value_ToCstr(parent);
10050    if (strval) {
10051        lhs << strval;
10052    } else {
10053        lhs << parent.value;
10054    }
10055}
10056
10057// --- emdi12.PutOrCall.value.SetStrptrMaybe
10058// Convert string to field.
10059// If the string is invalid, do not modify field and return false.
10060// In case of success, return true
10061bool emdi12::value_SetStrptrMaybe(emdi12::PutOrCall& parent, algo::strptr rhs) {
10062    bool ret = false;
10063    switch (elems_N(rhs)) {
10064        case 1: {
10065            switch (u64(rhs[0])) {
10066                case '0': {
10067                    value_SetEnum(parent,emdi12_PutOrCall_0); ret = true; break;
10068                }
10069                case '1': {
10070                    value_SetEnum(parent,emdi12_PutOrCall_1); ret = true; break;
10071                }
10072            }
10073            break;
10074        }
10075    }
10076    return ret;
10077}
10078
10079// --- emdi12.PutOrCall.value.SetStrptr
10080// Convert string to field.
10081// If the string is invalid, set numeric value to DFLT
10082void emdi12::value_SetStrptr(emdi12::PutOrCall& parent, algo::strptr rhs, emdi12_PutOrCallEnum dflt) {
10083    if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
10084}
10085
10086// --- emdi12.PutOrCall.value.ReadStrptrMaybe
10087// Convert string to field. Return success value
10088bool emdi12::value_ReadStrptrMaybe(emdi12::PutOrCall& parent, algo::strptr rhs) {
10089    bool retval = false;
10090    retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
10091    if (!retval) { // didn't work? try reading as underlying type
10092        retval = u32_ReadStrptrMaybe(parent.value,rhs);
10093    }
10094    return retval;
10095}
10096
10097// --- emdi12.PutOrCall..ReadStrptrMaybe
10098// Read fields of emdi12::PutOrCall from an ascii string.
10099// The format of the string is the format of the emdi12::PutOrCall's only field
10100bool emdi12::PutOrCall_ReadStrptrMaybe(emdi12::PutOrCall &parent, algo::strptr in_str) {
10101    bool retval = true;
10102    retval = retval && value_ReadStrptrMaybe(parent, in_str);
10103    return retval;
10104}
10105
10106// --- emdi12.PutOrCall..Print
10107// print string representation of ROW to string STR
10108// cfmt:emdi12.PutOrCall.String  printfmt:Raw
10109void emdi12::PutOrCall_Print(emdi12::PutOrCall row, algo::cstring& str) {
10110    emdi12::value_Print(row, str);
10111}
10112
10113// --- emdi12.SettlMethod.value.ToCstr
10114// Convert numeric value of field to one of predefined string constants.
10115// If string is found, return a static C string. Otherwise, return NULL.
10116const char* emdi12::value_ToCstr(const emdi12::SettlMethod& parent) {
10117    const char *ret = NULL;
10118    switch(value_GetEnum(parent)) {
10119        case emdi12_SettlMethod_C          : ret = "C";  break;
10120        case emdi12_SettlMethod_P          : ret = "P";  break;
10121    }
10122    return ret;
10123}
10124
10125// --- emdi12.SettlMethod.value.Print
10126// Convert value to a string. First, attempt conversion to a known string.
10127// If no string matches, print value as a numeric value.
10128void emdi12::value_Print(const emdi12::SettlMethod& parent, algo::cstring &lhs) {
10129    const char *strval = value_ToCstr(parent);
10130    if (strval) {
10131        lhs << strval;
10132    } else {
10133        lhs << parent.value;
10134    }
10135}
10136
10137// --- emdi12.SettlMethod.value.SetStrptrMaybe
10138// Convert string to field.
10139// If the string is invalid, do not modify field and return false.
10140// In case of success, return true
10141bool emdi12::value_SetStrptrMaybe(emdi12::SettlMethod& parent, algo::strptr rhs) {
10142    bool ret = false;
10143    switch (elems_N(rhs)) {
10144        case 1: {
10145            switch (u64(rhs[0])) {
10146                case 'C': {
10147                    value_SetEnum(parent,emdi12_SettlMethod_C); ret = true; break;
10148                }
10149                case 'P': {
10150                    value_SetEnum(parent,emdi12_SettlMethod_P); ret = true; break;
10151                }
10152            }
10153            break;
10154        }
10155    }
10156    return ret;
10157}
10158
10159// --- emdi12.SettlMethod.value.SetStrptr
10160// Convert string to field.
10161// If the string is invalid, set numeric value to DFLT
10162void emdi12::value_SetStrptr(emdi12::SettlMethod& parent, algo::strptr rhs, emdi12_SettlMethodEnum dflt) {
10163    if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
10164}
10165
10166// --- emdi12.SettlMethod.value.ReadStrptrMaybe
10167// Convert string to field. Return success value
10168bool emdi12::value_ReadStrptrMaybe(emdi12::SettlMethod& parent, algo::strptr rhs) {
10169    bool retval = false;
10170    retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
10171    if (!retval) { // didn't work? try reading as underlying type
10172        retval = u32_ReadStrptrMaybe(parent.value,rhs);
10173    }
10174    return retval;
10175}
10176
10177// --- emdi12.SettlMethod..ReadStrptrMaybe
10178// Read fields of emdi12::SettlMethod from an ascii string.
10179// The format of the string is the format of the emdi12::SettlMethod's only field
10180bool emdi12::SettlMethod_ReadStrptrMaybe(emdi12::SettlMethod &parent, algo::strptr in_str) {
10181    bool retval = true;
10182    retval = retval && value_ReadStrptrMaybe(parent, in_str);
10183    return retval;
10184}
10185
10186// --- emdi12.SettlMethod..Print
10187// print string representation of ROW to string STR
10188// cfmt:emdi12.SettlMethod.String  printfmt:Raw
10189void emdi12::SettlMethod_Print(emdi12::SettlMethod row, algo::cstring& str) {
10190    emdi12::value_Print(row, str);
10191}
10192
10193// --- emdi12.MarketSegmentGrp2..ReadFieldMaybe
10194bool emdi12::MarketSegmentGrp2_ReadFieldMaybe(emdi12::MarketSegmentGrp2& parent, algo::strptr field, algo::strptr strval) {
10195    bool retval = true;
10196    emdi12::FieldId field_id;
10197    (void)value_SetStrptrMaybe(field_id,field);
10198    switch(field_id) {
10199        case emdi12_FieldId_MarketSegmentID: {
10200            retval = u32_ReadStrptrMaybe(parent.MarketSegmentID, strval);
10201            break;
10202        }
10203        default: break;
10204    }
10205    if (!retval) {
10206        algo_lib::AppendErrtext("attr",field);
10207    }
10208    return retval;
10209}
10210
10211// --- emdi12.MarketSegmentGrp2..ReadStrptrMaybe
10212// Read fields of emdi12::MarketSegmentGrp2 from an ascii string.
10213// The format of the string is an ssim Tuple
10214bool emdi12::MarketSegmentGrp2_ReadStrptrMaybe(emdi12::MarketSegmentGrp2 &parent, algo::strptr in_str) {
10215    bool retval = true;
10216    retval = algo::StripTypeTag(in_str, "emdi12.MarketSegmentGrp2");
10217    ind_beg(algo::Attr_curs, attr, in_str) {
10218        retval = retval && MarketSegmentGrp2_ReadFieldMaybe(parent, attr.name, attr.value);
10219    }ind_end;
10220    return retval;
10221}
10222
10223// --- emdi12.MarketSegmentGrp2..Print
10224// print string representation of ROW to string STR
10225// cfmt:emdi12.MarketSegmentGrp2.String  printfmt:Tuple
10226void emdi12::MarketSegmentGrp2_Print(emdi12::MarketSegmentGrp2& row, algo::cstring& str) {
10227    algo::tempstr temp;
10228    str << "emdi12.MarketSegmentGrp2";
10229
10230    u32_Print(row.MarketSegmentID, temp);
10231    PrintAttrSpaceReset(str,"MarketSegmentID", temp);
10232}
10233
10234// --- emdi12.MarketSegmentGrp2..FastEncode
10235void emdi12::MarketSegmentGrp2_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::MarketSegmentGrp2& parent) {
10236    int index = ary_N(buf);
10237    u64 pmap(0);
10238    // MarketSegmentID unsigned copy mandatory
10239    if (!MarketSegmentID_AssignedQ(state) || parent.MarketSegmentID != state.MarketSegmentID) {
10240        lib_fast::EncodeUnsigned(buf,parent.MarketSegmentID,false);
10241        lib_fast::SetPmapBit(pmap,0);
10242    }
10243    state.MarketSegmentID = parent.MarketSegmentID;
10244    MarketSegmentID_SetAssigned(state);
10245    lib_fast::InsertPmap(buf,index,pmap);
10246}
10247
10248// --- emdi12.MarketSegmentGrp2..FastDecode
10249bool emdi12::MarketSegmentGrp2_FastDecode(algo::memptr& from, FastState& state, emdi12::MarketSegmentGrp2& parent) {
10250    bool ok = true;
10251    u64 pmap;
10252    ok = lib_fast::DecodePmap(from,pmap);
10253    if (!ok) {
10254        state.error << "emdi12.MarketSegmentGrp2: bad pmap" << eol;
10255    }
10256    // MarketSegmentID unsigned copy mandatory
10257    if (ok) {
10258        bool prs = lib_fast::GetPmapBit(pmap,0);
10259        if (prs) {
10260            ok = lib_fast::DecodeUnsigned(from,parent.MarketSegmentID,false);
10261            if (!ok) {
10262                state.error << "emdi12.MarketSegmentGrp2.MarketSegmentID: bad Unsigned" << eol;
10263            }
10264        } else if (MarketSegmentID_AssignedQ(state)) {
10265            parent.MarketSegmentID = state.MarketSegmentID;
10266        } else {
10267            ok = false;
10268            state.error << "emdi12.MarketSegmentGrp2.MarketSegmentID: copy operator: previous value unassigned" << eol;
10269        }
10270        MarketSegmentID_SetAssigned(state);
10271        state.MarketSegmentID = parent.MarketSegmentID;
10272    }
10273    return ok;
10274}
10275
10276// --- emdi12.MarketSegmentGrp2..FixEncode
10277void emdi12::MarketSegmentGrp2_FixEncode(cstring& buf, emdi12::MarketSegmentGrp2& parent, char soh) {
10278    buf << "1300=" << parent.MarketSegmentID << soh;
10279}
10280
10281// --- emdi12.FlexibleInstrumentUpdate.base.CopyOut
10282// Copy fields out of row
10283void emdi12::parent_CopyOut(emdi12::FlexibleInstrumentUpdate &row, emdi12::TemplateHeader &out) {
10284    // length: field value is computed
10285    // id: field value is computed
10286    (void)row;//only to avoid -Wunused-parameter
10287    (void)out;//only to avoid -Wunused-parameter
10288}
10289
10290// --- emdi12.FlexibleInstrumentUpdate.MsgSeqNum.ReadStrptrMaybe
10291inline static bool emdi12::MsgSeqNum_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) {
10292    bool retval = true;
10293    retval = u32_ReadStrptrMaybe(parent.MsgSeqNum, in_str);
10294    return retval;
10295}
10296
10297// --- emdi12.FlexibleInstrumentUpdate.SenderCompID.ReadStrptrMaybe
10298inline static bool emdi12::SenderCompID_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) {
10299    bool retval = true;
10300    retval = u32_ReadStrptrMaybe(parent.SenderCompID, in_str);
10301    return retval;
10302}
10303
10304// --- emdi12.FlexibleInstrumentUpdate.SecurityID.ReadStrptrMaybe
10305inline static bool emdi12::SecurityID_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) {
10306    bool retval = true;
10307    retval = i64_ReadStrptrMaybe(parent.SecurityID, in_str);
10308    return retval;
10309}
10310
10311// --- emdi12.FlexibleInstrumentUpdate.SecurityDesc.ReadStrptrMaybe
10312inline static bool emdi12::SecurityDesc_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) {
10313    bool retval = true;
10314    retval = algo::Smallstr30_ReadStrptrMaybe(parent.SecurityDesc, in_str);
10315    return retval;
10316}
10317
10318// --- emdi12.FlexibleInstrumentUpdate.SecurityType.ReadStrptrMaybe
10319inline static bool emdi12::SecurityType_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) {
10320    bool retval = true;
10321    retval = emdi12::SecurityType_ReadStrptrMaybe(parent.SecurityType, in_str);
10322    return retval;
10323}
10324
10325// --- emdi12.FlexibleInstrumentUpdate.ProductComplex.ReadStrptrMaybe
10326inline static bool emdi12::ProductComplex_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) {
10327    bool retval = true;
10328    retval = emdi12::ProductComplex_ReadStrptrMaybe(parent.ProductComplex, in_str);
10329    return retval;
10330}
10331
10332// --- emdi12.FlexibleInstrumentUpdate.MaturityDate.ReadStrptrMaybe
10333inline static bool emdi12::MaturityDate_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) {
10334    bool retval = true;
10335    retval = u32_ReadStrptrMaybe(parent.MaturityDate, in_str);
10336    return retval;
10337}
10338
10339// --- emdi12.FlexibleInstrumentUpdate.StrikePrice.ReadStrptrMaybe
10340inline static bool emdi12::StrikePrice_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) {
10341    bool retval = true;
10342    algo::Decimal StrikePrice_tmp;
10343    retval = algo::Decimal_ReadStrptrMaybe(StrikePrice_tmp, in_str);
10344    if (retval) {
10345        StrikePrice_Set(parent, StrikePrice_tmp);
10346    }
10347    return retval;
10348}
10349
10350// --- emdi12.FlexibleInstrumentUpdate.PutOrCall.ReadStrptrMaybe
10351inline static bool emdi12::PutOrCall_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) {
10352    bool retval = true;
10353    emdi12::PutOrCall PutOrCall_tmp;
10354    retval = emdi12::PutOrCall_ReadStrptrMaybe(PutOrCall_tmp, in_str);
10355    if (retval) {
10356        PutOrCall_Set(parent, PutOrCall_tmp);
10357    }
10358    return retval;
10359}
10360
10361// --- emdi12.FlexibleInstrumentUpdate.OptAttribute.ReadStrptrMaybe
10362inline static bool emdi12::OptAttribute_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) {
10363    bool retval = true;
10364    u32 OptAttribute_tmp;
10365    retval = u32_ReadStrptrMaybe(OptAttribute_tmp, in_str);
10366    if (retval) {
10367        OptAttribute_Set(parent, OptAttribute_tmp);
10368    }
10369    return retval;
10370}
10371
10372// --- emdi12.FlexibleInstrumentUpdate.ExerciseStyle.ReadStrptrMaybe
10373inline static bool emdi12::ExerciseStyle_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) {
10374    bool retval = true;
10375    emdi12::ExerciseStyle ExerciseStyle_tmp;
10376    retval = emdi12::ExerciseStyle_ReadStrptrMaybe(ExerciseStyle_tmp, in_str);
10377    if (retval) {
10378        ExerciseStyle_Set(parent, ExerciseStyle_tmp);
10379    }
10380    return retval;
10381}
10382
10383// --- emdi12.FlexibleInstrumentUpdate.SettlMethod.ReadStrptrMaybe
10384inline static bool emdi12::SettlMethod_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) {
10385    bool retval = true;
10386    retval = emdi12::SettlMethod_ReadStrptrMaybe(parent.SettlMethod, in_str);
10387    return retval;
10388}
10389
10390// --- emdi12.FlexibleInstrumentUpdate.MarketSegmentGrp2.ReadStrptrMaybe
10391inline static bool emdi12::MarketSegmentGrp2_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) {
10392    bool retval = true;
10393    retval = emdi12::MarketSegmentGrp2_ReadStrptrMaybe(parent.MarketSegmentGrp2, in_str);
10394    return retval;
10395}
10396
10397// --- emdi12.FlexibleInstrumentUpdate.TransactTime.ReadStrptrMaybe
10398inline static bool emdi12::TransactTime_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) {
10399    bool retval = true;
10400    retval = i64_ReadStrptrMaybe(parent.TransactTime, in_str);
10401    return retval;
10402}
10403
10404// --- emdi12.FlexibleInstrumentUpdate.pmask_bitcurs.Next
10405// proceed to next item
10406void emdi12::FlexibleInstrumentUpdate_pmask_bitcurs_Next(FlexibleInstrumentUpdate_pmask_bitcurs &curs) {
10407    ++curs.bit;
10408    int index = curs.bit / 32;
10409    int offset = curs.bit % 32;
10410    for (; index < curs.n_elems; ++index, offset = 0) {
10411        u64 rest = curs.elems[index] >> offset;
10412        if (rest) {
10413            offset += algo::u64_BitScanForward(rest);
10414            break;
10415        }
10416    }
10417    curs.bit = index * 32 + offset;
10418}
10419
10420// --- emdi12.FlexibleInstrumentUpdate..ReadFieldMaybe
10421bool emdi12::FlexibleInstrumentUpdate_ReadFieldMaybe(emdi12::FlexibleInstrumentUpdate& parent, algo::strptr field, algo::strptr strval) {
10422    bool retval = true;
10423    emdi12::FieldId field_id;
10424    (void)value_SetStrptrMaybe(field_id,field);
10425    switch(field_id) {
10426        case emdi12_FieldId_base: {
10427            retval = false;
10428            break;
10429        }
10430        case emdi12_FieldId_length: {
10431            retval = false;
10432            break;
10433        }
10434        case emdi12_FieldId_id: {
10435            retval = false;
10436            break;
10437        }
10438        case emdi12_FieldId_pmask: {
10439            retval = false;
10440            break;
10441        }
10442        case emdi12_FieldId_MsgType: {
10443            retval = true;
10444            break;
10445        }
10446        case emdi12_FieldId_MsgSeqNum: {
10447            retval = MsgSeqNum_ReadStrptrMaybe(parent, strval);
10448            break;
10449        }
10450        case emdi12_FieldId_SenderCompID: {
10451            retval = SenderCompID_ReadStrptrMaybe(parent, strval);
10452            break;
10453        }
10454        case emdi12_FieldId_SecurityUpdateAction: {
10455            retval = true;
10456            break;
10457        }
10458        case emdi12_FieldId_SecurityID: {
10459            retval = SecurityID_ReadStrptrMaybe(parent, strval);
10460            break;
10461        }
10462        case emdi12_FieldId_SecurityIDSource: {
10463            retval = true;
10464            break;
10465        }
10466        case emdi12_FieldId_SecurityDesc: {
10467            retval = SecurityDesc_ReadStrptrMaybe(parent, strval);
10468            break;
10469        }
10470        case emdi12_FieldId_SecurityType: {
10471            retval = SecurityType_ReadStrptrMaybe(parent, strval);
10472            break;
10473        }
10474        case emdi12_FieldId_ProductComplex: {
10475            retval = ProductComplex_ReadStrptrMaybe(parent, strval);
10476            break;
10477        }
10478        case emdi12_FieldId_MaturityDate: {
10479            retval = MaturityDate_ReadStrptrMaybe(parent, strval);
10480            break;
10481        }
10482        case emdi12_FieldId_StrikePrice: {
10483            retval = StrikePrice_ReadStrptrMaybe(parent, strval);
10484            if (retval) {
10485                pmask_qSetBit(parent, 3);
10486            }
10487            break;
10488        }
10489        case emdi12_FieldId_PutOrCall: {
10490            retval = PutOrCall_ReadStrptrMaybe(parent, strval);
10491            if (retval) {
10492                pmask_qSetBit(parent, 2);
10493            }
10494            break;
10495        }
10496        case emdi12_FieldId_OptAttribute: {
10497            retval = OptAttribute_ReadStrptrMaybe(parent, strval);
10498            if (retval) {
10499                pmask_qSetBit(parent, 1);
10500            }
10501            break;
10502        }
10503        case emdi12_FieldId_ExerciseStyle: {
10504            retval = ExerciseStyle_ReadStrptrMaybe(parent, strval);
10505            if (retval) {
10506                pmask_qSetBit(parent, 0);
10507            }
10508            break;
10509        }
10510        case emdi12_FieldId_SettlMethod: {
10511            retval = SettlMethod_ReadStrptrMaybe(parent, strval);
10512            break;
10513        }
10514        case emdi12_FieldId_MarketSegmentGrp2: {
10515            retval = MarketSegmentGrp2_ReadStrptrMaybe(parent, strval);
10516            break;
10517        }
10518        case emdi12_FieldId_TransactTime: {
10519            retval = TransactTime_ReadStrptrMaybe(parent, strval);
10520            break;
10521        }
10522        default: break;
10523    }
10524    if (!retval) {
10525        algo_lib::AppendErrtext("attr",field);
10526    }
10527    return retval;
10528}
10529
10530// --- emdi12.FlexibleInstrumentUpdate..ReadStrptrMaybe
10531// Read fields of emdi12::FlexibleInstrumentUpdate from an ascii string.
10532// The format of the string is an ssim Tuple
10533bool emdi12::FlexibleInstrumentUpdate_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) {
10534    bool retval = true;
10535    retval = algo::StripTypeTag(in_str, "emdi12.FlexibleInstrumentUpdate");
10536    ind_beg(algo::Attr_curs, attr, in_str) {
10537        retval = retval && FlexibleInstrumentUpdate_ReadFieldMaybe(parent, attr.name, attr.value);
10538    }ind_end;
10539    return retval;
10540}
10541
10542// --- emdi12.FlexibleInstrumentUpdate..Init
10543// Set all fields to initial values.
10544void emdi12::FlexibleInstrumentUpdate_Init(emdi12::FlexibleInstrumentUpdate& parent) {
10545    parent.length = u32(ssizeof(parent) + (0));
10546    parent.id = u32(100);
10547    parent.pmask = u32(0);
10548    parent.MsgSeqNum = u32(0);
10549    parent.SenderCompID = u32(0);
10550    parent.SecurityID = i64(0);
10551    parent.MaturityDate = u32(0);
10552    parent.StrikePrice = algo::Decimal(algo::Decimal(0,0));
10553    parent.OptAttribute = u32(0);
10554    parent.TransactTime = i64(0);
10555}
10556
10557// --- emdi12.FlexibleInstrumentUpdate..Print
10558// print string representation of ROW to string STR
10559// cfmt:emdi12.FlexibleInstrumentUpdate.String  printfmt:Tuple
10560void emdi12::FlexibleInstrumentUpdate_Print(emdi12::FlexibleInstrumentUpdate& row, algo::cstring& str) {
10561    algo::tempstr temp;
10562    str << "emdi12.FlexibleInstrumentUpdate";
10563
10564    algo::strptr_Print(MsgType_Get(row), temp);
10565    PrintAttrSpaceReset(str,"MsgType", temp);
10566
10567    u32_Print(row.MsgSeqNum, temp);
10568    PrintAttrSpaceReset(str,"MsgSeqNum", temp);
10569
10570    u32_Print(row.SenderCompID, temp);
10571    PrintAttrSpaceReset(str,"SenderCompID", temp);
10572
10573    algo::strptr_Print(SecurityUpdateAction_Get(row), temp);
10574    PrintAttrSpaceReset(str,"SecurityUpdateAction", temp);
10575
10576    i64_Print(row.SecurityID, temp);
10577    PrintAttrSpaceReset(str,"SecurityID", temp);
10578
10579    algo::strptr_Print(SecurityIDSource_Get(row), temp);
10580    PrintAttrSpaceReset(str,"SecurityIDSource", temp);
10581
10582    algo::Smallstr30_Print(row.SecurityDesc, temp);
10583    PrintAttrSpaceReset(str,"SecurityDesc", temp);
10584
10585    emdi12::SecurityType_Print(row.SecurityType, temp);
10586    PrintAttrSpaceReset(str,"SecurityType", temp);
10587
10588    emdi12::ProductComplex_Print(row.ProductComplex, temp);
10589    PrintAttrSpaceReset(str,"ProductComplex", temp);
10590
10591    u32_Print(row.MaturityDate, temp);
10592    PrintAttrSpaceReset(str,"MaturityDate", temp);
10593
10594    if (StrikePrice_PresentQ(row)) {
10595        algo::Decimal_Print(row.StrikePrice, temp);
10596        PrintAttrSpaceReset(str,"StrikePrice", temp);
10597    }
10598
10599    if (PutOrCall_PresentQ(row)) {
10600        emdi12::PutOrCall_Print(row.PutOrCall, temp);
10601        PrintAttrSpaceReset(str,"PutOrCall", temp);
10602    }
10603
10604    if (OptAttribute_PresentQ(row)) {
10605        u32_Print(row.OptAttribute, temp);
10606        PrintAttrSpaceReset(str,"OptAttribute", temp);
10607    }
10608
10609    if (ExerciseStyle_PresentQ(row)) {
10610        emdi12::ExerciseStyle_Print(row.ExerciseStyle, temp);
10611        PrintAttrSpaceReset(str,"ExerciseStyle", temp);
10612    }
10613
10614    emdi12::SettlMethod_Print(row.SettlMethod, temp);
10615    PrintAttrSpaceReset(str,"SettlMethod", temp);
10616
10617    emdi12::MarketSegmentGrp2_Print(row.MarketSegmentGrp2, temp);
10618    PrintAttrSpaceReset(str,"MarketSegmentGrp2", temp);
10619
10620    i64_Print(row.TransactTime, temp);
10621    PrintAttrSpaceReset(str,"TransactTime", temp);
10622}
10623
10624// --- emdi12.FlexibleInstrumentUpdate..FastEncode
10625void emdi12::FlexibleInstrumentUpdate_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::FlexibleInstrumentUpdate& parent) {
10626    int index = ary_N(buf);
10627    u64 pmap(0);
10628    if (!tid_AssignedQ(state) || parent.id != state.tid) {
10629        lib_fast::EncodeUnsigned(buf,parent.id,false);
10630        lib_fast::SetPmapBit(pmap,0);
10631    }
10632    tid_SetAssigned(state);
10633    state.tid = parent.id;
10634    // MsgType string constant mandatory
10635    // MsgSeqNum unsigned increment mandatory
10636    if (MsgSeqNum_AssignedQ(state)) {
10637        if (parent.MsgSeqNum != state.MsgSeqNum + 1) {
10638            lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
10639            lib_fast::SetPmapBit(pmap,1);
10640        }
10641    } else {
10642        lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
10643        lib_fast::SetPmapBit(pmap,1);
10644    }
10645    state.MsgSeqNum = parent.MsgSeqNum;
10646    MsgSeqNum_SetAssigned(state);
10647    // SenderCompID unsigned copy mandatory
10648    if (!SenderCompID_AssignedQ(state) || parent.SenderCompID != state.SenderCompID) {
10649        lib_fast::EncodeUnsigned(buf,parent.SenderCompID,false);
10650        lib_fast::SetPmapBit(pmap,2);
10651    }
10652    state.SenderCompID = parent.SenderCompID;
10653    SenderCompID_SetAssigned(state);
10654    // SecurityUpdateAction string constant mandatory
10655    // SecurityID signed none mandatory
10656    lib_fast::EncodeSigned(buf,parent.SecurityID,false);
10657    // SecurityIDSource string constant mandatory
10658    // SecurityDesc string none mandatory
10659    lib_fast::EncodeString(buf,parent.SecurityDesc,false);
10660    // SecurityType type none mandatory
10661    lib_fast::EncodeUnsigned(buf,parent.SecurityType.value,false);
10662    // ProductComplex type none mandatory
10663    lib_fast::EncodeUnsigned(buf,parent.ProductComplex.value,false);
10664    // MaturityDate unsigned none mandatory
10665    lib_fast::EncodeUnsigned(buf,parent.MaturityDate,false);
10666    // StrikePrice scaled none optional
10667    if (StrikePrice_PresentQ(parent)) {
10668        lib_fast::EncodeScaled(buf,parent.StrikePrice,true);
10669    } else {
10670        lib_fast::EncodeNull(buf);
10671    }
10672    // PutOrCall type none optional
10673    if (PutOrCall_PresentQ(parent)) {
10674        lib_fast::EncodeUnsigned(buf,parent.PutOrCall.value,true);
10675    } else {
10676        lib_fast::EncodeNull(buf);
10677    }
10678    // OptAttribute unsigned none optional
10679    if (OptAttribute_PresentQ(parent)) {
10680        lib_fast::EncodeUnsigned(buf,parent.OptAttribute,true);
10681    } else {
10682        lib_fast::EncodeNull(buf);
10683    }
10684    // ExerciseStyle type none optional
10685    if (ExerciseStyle_PresentQ(parent)) {
10686        lib_fast::EncodeUnsigned(buf,parent.ExerciseStyle.value,true);
10687    } else {
10688        lib_fast::EncodeNull(buf);
10689    }
10690    // SettlMethod type none mandatory
10691    lib_fast::EncodeUnsigned(buf,parent.SettlMethod.value,false);
10692    // MarketSegmentGrp2 sequence none mandatory
10693    MarketSegmentGrp2_FastEncode(buf,state,parent.MarketSegmentGrp2);
10694    // TransactTime signed none mandatory
10695    lib_fast::EncodeSigned(buf,parent.TransactTime,false);
10696    lib_fast::InsertPmap(buf,index,pmap);
10697}
10698
10699// --- emdi12.FlexibleInstrumentUpdate..FastDecode
10700bool emdi12::FlexibleInstrumentUpdate_FastDecode(algo::memptr& from, u64 pmap, FastState& state, emdi12::FlexibleInstrumentUpdate& parent) {
10701    bool ok = true;
10702    // MsgType string constant mandatory
10703    if (ok) {
10704    }
10705    // MsgSeqNum unsigned increment mandatory
10706    if (ok) {
10707        bool prs = lib_fast::GetPmapBit(pmap,1);
10708        if (prs) {
10709            ok = lib_fast::DecodeUnsigned(from,parent.MsgSeqNum,false);
10710            if (!ok) {
10711                state.error << "emdi12.FlexibleInstrumentUpdate.MsgSeqNum: bad Unsigned" << eol;
10712            }
10713        } else if (MsgSeqNum_AssignedQ(state)) {
10714            parent.MsgSeqNum = state.MsgSeqNum + 1;
10715        } else {
10716            ok = false;
10717            state.error << "emdi12.FlexibleInstrumentUpdate.MsgSeqNum: increment operator: previous value unassigned" << eol;
10718        }
10719        MsgSeqNum_SetAssigned(state);
10720        state.MsgSeqNum = parent.MsgSeqNum;
10721    }
10722    // SenderCompID unsigned copy mandatory
10723    if (ok) {
10724        bool prs = lib_fast::GetPmapBit(pmap,2);
10725        if (prs) {
10726            ok = lib_fast::DecodeUnsigned(from,parent.SenderCompID,false);
10727            if (!ok) {
10728                state.error << "emdi12.FlexibleInstrumentUpdate.SenderCompID: bad Unsigned" << eol;
10729            }
10730        } else if (SenderCompID_AssignedQ(state)) {
10731            parent.SenderCompID = state.SenderCompID;
10732        } else {
10733            ok = false;
10734            state.error << "emdi12.FlexibleInstrumentUpdate.SenderCompID: copy operator: previous value unassigned" << eol;
10735        }
10736        SenderCompID_SetAssigned(state);
10737        state.SenderCompID = parent.SenderCompID;
10738    }
10739    // SecurityUpdateAction string constant mandatory
10740    if (ok) {
10741    }
10742    // SecurityID signed none mandatory
10743    if (ok) {
10744        ok = lib_fast::DecodeSigned(from,parent.SecurityID,false);
10745        if (!ok) {
10746            state.error << "emdi12.FlexibleInstrumentUpdate.SecurityID: bad Signed" << eol;
10747        }
10748    }
10749    // SecurityIDSource string constant mandatory
10750    if (ok) {
10751    }
10752    // SecurityDesc string none mandatory
10753    if (ok) {
10754        ok = lib_fast::DecodeString(from,parent.SecurityDesc,false);
10755        if (!ok) {
10756            state.error << "emdi12.FlexibleInstrumentUpdate.SecurityDesc: bad String" << eol;
10757        }
10758    }
10759    // SecurityType type none mandatory
10760    if (ok) {
10761        ok = lib_fast::DecodeUnsigned(from,parent.SecurityType.value,false);
10762        if (!ok) {
10763            state.error << "emdi12.FlexibleInstrumentUpdate.SecurityType: bad Unsigned" << eol;
10764        }
10765    }
10766    // ProductComplex type none mandatory
10767    if (ok) {
10768        ok = lib_fast::DecodeUnsigned(from,parent.ProductComplex.value,false);
10769        if (!ok) {
10770            state.error << "emdi12.FlexibleInstrumentUpdate.ProductComplex: bad Unsigned" << eol;
10771        }
10772    }
10773    // MaturityDate unsigned none mandatory
10774    if (ok) {
10775        ok = lib_fast::DecodeUnsigned(from,parent.MaturityDate,false);
10776        if (!ok) {
10777            state.error << "emdi12.FlexibleInstrumentUpdate.MaturityDate: bad Unsigned" << eol;
10778        }
10779    }
10780    // StrikePrice scaled none optional
10781    if (ok) {
10782        bool prs = !lib_fast::DecodeNull(from);
10783        if (prs) {
10784            ok = lib_fast::DecodeScaled(from,parent.StrikePrice,true);
10785            if (!ok) {
10786                state.error << "emdi12.FlexibleInstrumentUpdate.StrikePrice: bad Scaled" << eol;
10787            }
10788        }
10789        pmask_qSetBitVal(parent,StrikePrice_Present_GetBit(parent),prs);
10790    }
10791    // PutOrCall type none optional
10792    if (ok) {
10793        bool prs = !lib_fast::DecodeNull(from);
10794        if (prs) {
10795            ok = lib_fast::DecodeUnsigned(from,parent.PutOrCall.value,true);
10796            if (!ok) {
10797                state.error << "emdi12.FlexibleInstrumentUpdate.PutOrCall: bad Unsigned" << eol;
10798            }
10799        }
10800        pmask_qSetBitVal(parent,PutOrCall_Present_GetBit(parent),prs);
10801    }
10802    // OptAttribute unsigned none optional
10803    if (ok) {
10804        bool prs = !lib_fast::DecodeNull(from);
10805        if (prs) {
10806            ok = lib_fast::DecodeUnsigned(from,parent.OptAttribute,true);
10807            if (!ok) {
10808                state.error << "emdi12.FlexibleInstrumentUpdate.OptAttribute: bad Unsigned" << eol;
10809            }
10810        }
10811        pmask_qSetBitVal(parent,OptAttribute_Present_GetBit(parent),prs);
10812    }
10813    // ExerciseStyle type none optional
10814    if (ok) {
10815        bool prs = !lib_fast::DecodeNull(from);
10816        if (prs) {
10817            ok = lib_fast::DecodeUnsigned(from,parent.ExerciseStyle.value,true);
10818            if (!ok) {
10819                state.error << "emdi12.FlexibleInstrumentUpdate.ExerciseStyle: bad Unsigned" << eol;
10820            }
10821        }
10822        pmask_qSetBitVal(parent,ExerciseStyle_Present_GetBit(parent),prs);
10823    }
10824    // SettlMethod type none mandatory
10825    if (ok) {
10826        ok = lib_fast::DecodeUnsigned(from,parent.SettlMethod.value,false);
10827        if (!ok) {
10828            state.error << "emdi12.FlexibleInstrumentUpdate.SettlMethod: bad Unsigned" << eol;
10829        }
10830    }
10831    // MarketSegmentGrp2 sequence none mandatory
10832    if (ok) {
10833        ok = MarketSegmentGrp2_FastDecode(from,state,parent.MarketSegmentGrp2);
10834    }
10835    // TransactTime signed none mandatory
10836    if (ok) {
10837        ok = lib_fast::DecodeSigned(from,parent.TransactTime,false);
10838        if (!ok) {
10839            state.error << "emdi12.FlexibleInstrumentUpdate.TransactTime: bad Signed" << eol;
10840        }
10841    }
10842    return ok;
10843}
10844
10845// --- emdi12.FlexibleInstrumentUpdate..FixEncode
10846void emdi12::FlexibleInstrumentUpdate_FixEncode(cstring& buf, emdi12::FlexibleInstrumentUpdate& parent, char soh) {
10847    buf << "35=" << MsgType_Get(parent) << soh;
10848    buf << "34=" << parent.MsgSeqNum << soh;
10849    buf << "49=" << parent.SenderCompID << soh;
10850    buf << "980=" << SecurityUpdateAction_Get(parent) << soh;
10851    buf << "48=" << parent.SecurityID << soh;
10852    buf << "22=" << SecurityIDSource_Get(parent) << soh;
10853    buf << "107=" << parent.SecurityDesc << soh;
10854    buf << "167=" << parent.SecurityType << soh;
10855    buf << "1227=" << parent.ProductComplex << soh;
10856    buf << "541=" << parent.MaturityDate << soh;
10857    if (StrikePrice_PresentQ(parent)) {
10858        buf << "202=" << parent.StrikePrice << soh;
10859    }
10860    if (PutOrCall_PresentQ(parent)) {
10861        buf << "201=" << parent.PutOrCall << soh;
10862    }
10863    if (OptAttribute_PresentQ(parent)) {
10864        buf << "206=" << parent.OptAttribute << soh;
10865    }
10866    if (ExerciseStyle_PresentQ(parent)) {
10867        buf << "1194=" << parent.ExerciseStyle << soh;
10868    }
10869    buf << "1193=" << parent.SettlMethod << soh;
10870    buf << "1310=1" << soh;
10871    buf << "60=" << parent.TransactTime << soh;
10872}
10873
10874// --- emdi12.InstrumentStateChange.base.CopyOut
10875// Copy fields out of row
10876void emdi12::parent_CopyOut(emdi12::InstrumentStateChange &row, emdi12::TemplateHeader &out) {
10877    // length: field value is computed
10878    // id: field value is computed
10879    (void)row;//only to avoid -Wunused-parameter
10880    (void)out;//only to avoid -Wunused-parameter
10881}
10882
10883// --- emdi12.InstrumentStateChange.MsgSeqNum.ReadStrptrMaybe
10884inline static bool emdi12::MsgSeqNum_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) {
10885    bool retval = true;
10886    retval = u32_ReadStrptrMaybe(parent.MsgSeqNum, in_str);
10887    return retval;
10888}
10889
10890// --- emdi12.InstrumentStateChange.SenderCompID.ReadStrptrMaybe
10891inline static bool emdi12::SenderCompID_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) {
10892    bool retval = true;
10893    retval = u32_ReadStrptrMaybe(parent.SenderCompID, in_str);
10894    return retval;
10895}
10896
10897// --- emdi12.InstrumentStateChange.MarketSegmentID.ReadStrptrMaybe
10898inline static bool emdi12::MarketSegmentID_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) {
10899    bool retval = true;
10900    retval = u32_ReadStrptrMaybe(parent.MarketSegmentID, in_str);
10901    return retval;
10902}
10903
10904// --- emdi12.InstrumentStateChange.SecurityID.ReadStrptrMaybe
10905inline static bool emdi12::SecurityID_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) {
10906    bool retval = true;
10907    retval = i64_ReadStrptrMaybe(parent.SecurityID, in_str);
10908    return retval;
10909}
10910
10911// --- emdi12.InstrumentStateChange.SecurityStatus.ReadStrptrMaybe
10912inline static bool emdi12::SecurityStatus_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) {
10913    bool retval = true;
10914    retval = emdi12::SecurityStatus_ReadStrptrMaybe(parent.SecurityStatus, in_str);
10915    return retval;
10916}
10917
10918// --- emdi12.InstrumentStateChange.SecurityTradingStatus.ReadStrptrMaybe
10919inline static bool emdi12::SecurityTradingStatus_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) {
10920    bool retval = true;
10921    emdi12::SecurityTradingStatus SecurityTradingStatus_tmp;
10922    retval = emdi12::SecurityTradingStatus_ReadStrptrMaybe(SecurityTradingStatus_tmp, in_str);
10923    if (retval) {
10924        SecurityTradingStatus_Set(parent, SecurityTradingStatus_tmp);
10925    }
10926    return retval;
10927}
10928
10929// --- emdi12.InstrumentStateChange.MarketCondition.ReadStrptrMaybe
10930inline static bool emdi12::MarketCondition_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) {
10931    bool retval = true;
10932    retval = emdi12::MarketCondition_ReadStrptrMaybe(parent.MarketCondition, in_str);
10933    return retval;
10934}
10935
10936// --- emdi12.InstrumentStateChange.FastMarketIndicator.ReadStrptrMaybe
10937inline static bool emdi12::FastMarketIndicator_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) {
10938    bool retval = true;
10939    retval = emdi12::FastMarketIndicator_ReadStrptrMaybe(parent.FastMarketIndicator, in_str);
10940    return retval;
10941}
10942
10943// --- emdi12.InstrumentStateChange.SecurityTradingEvent.ReadStrptrMaybe
10944inline static bool emdi12::SecurityTradingEvent_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) {
10945    bool retval = true;
10946    emdi12::SecurityTradingEvent SecurityTradingEvent_tmp;
10947    retval = emdi12::SecurityTradingEvent_ReadStrptrMaybe(SecurityTradingEvent_tmp, in_str);
10948    if (retval) {
10949        SecurityTradingEvent_Set(parent, SecurityTradingEvent_tmp);
10950    }
10951    return retval;
10952}
10953
10954// --- emdi12.InstrumentStateChange.SoldOutIndicator.ReadStrptrMaybe
10955inline static bool emdi12::SoldOutIndicator_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) {
10956    bool retval = true;
10957    emdi12::SoldOutIndicator SoldOutIndicator_tmp;
10958    retval = emdi12::SoldOutIndicator_ReadStrptrMaybe(SoldOutIndicator_tmp, in_str);
10959    if (retval) {
10960        SoldOutIndicator_Set(parent, SoldOutIndicator_tmp);
10961    }
10962    return retval;
10963}
10964
10965// --- emdi12.InstrumentStateChange.HighPx.ReadStrptrMaybe
10966inline static bool emdi12::HighPx_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) {
10967    bool retval = true;
10968    algo::Decimal HighPx_tmp;
10969    retval = algo::Decimal_ReadStrptrMaybe(HighPx_tmp, in_str);
10970    if (retval) {
10971        HighPx_Set(parent, HighPx_tmp);
10972    }
10973    return retval;
10974}
10975
10976// --- emdi12.InstrumentStateChange.LowPx.ReadStrptrMaybe
10977inline static bool emdi12::LowPx_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) {
10978    bool retval = true;
10979    algo::Decimal LowPx_tmp;
10980    retval = algo::Decimal_ReadStrptrMaybe(LowPx_tmp, in_str);
10981    if (retval) {
10982        LowPx_Set(parent, LowPx_tmp);
10983    }
10984    return retval;
10985}
10986
10987// --- emdi12.InstrumentStateChange.TransactTime.ReadStrptrMaybe
10988inline static bool emdi12::TransactTime_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) {
10989    bool retval = true;
10990    retval = i64_ReadStrptrMaybe(parent.TransactTime, in_str);
10991    return retval;
10992}
10993
10994// --- emdi12.InstrumentStateChange.TESSecurityStatus.ReadStrptrMaybe
10995inline static bool emdi12::TESSecurityStatus_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) {
10996    bool retval = true;
10997    emdi12::SecurityStatus TESSecurityStatus_tmp;
10998    retval = emdi12::SecurityStatus_ReadStrptrMaybe(TESSecurityStatus_tmp, in_str);
10999    if (retval) {
11000        TESSecurityStatus_Set(parent, TESSecurityStatus_tmp);
11001    }
11002    return retval;
11003}
11004
11005// --- emdi12.InstrumentStateChange.pmask_bitcurs.Next
11006// proceed to next item
11007void emdi12::InstrumentStateChange_pmask_bitcurs_Next(InstrumentStateChange_pmask_bitcurs &curs) {
11008    ++curs.bit;
11009    int index = curs.bit / 32;
11010    int offset = curs.bit % 32;
11011    for (; index < curs.n_elems; ++index, offset = 0) {
11012        u64 rest = curs.elems[index] >> offset;
11013        if (rest) {
11014            offset += algo::u64_BitScanForward(rest);
11015            break;
11016        }
11017    }
11018    curs.bit = index * 32 + offset;
11019}
11020
11021// --- emdi12.InstrumentStateChange..ReadFieldMaybe
11022bool emdi12::InstrumentStateChange_ReadFieldMaybe(emdi12::InstrumentStateChange& parent, algo::strptr field, algo::strptr strval) {
11023    bool retval = true;
11024    emdi12::FieldId field_id;
11025    (void)value_SetStrptrMaybe(field_id,field);
11026    switch(field_id) {
11027        case emdi12_FieldId_base: {
11028            retval = false;
11029            break;
11030        }
11031        case emdi12_FieldId_length: {
11032            retval = false;
11033            break;
11034        }
11035        case emdi12_FieldId_id: {
11036            retval = false;
11037            break;
11038        }
11039        case emdi12_FieldId_pmask: {
11040            retval = false;
11041            break;
11042        }
11043        case emdi12_FieldId_MsgType: {
11044            retval = true;
11045            break;
11046        }
11047        case emdi12_FieldId_MsgSeqNum: {
11048            retval = MsgSeqNum_ReadStrptrMaybe(parent, strval);
11049            break;
11050        }
11051        case emdi12_FieldId_SenderCompID: {
11052            retval = SenderCompID_ReadStrptrMaybe(parent, strval);
11053            break;
11054        }
11055        case emdi12_FieldId_MarketSegmentID: {
11056            retval = MarketSegmentID_ReadStrptrMaybe(parent, strval);
11057            break;
11058        }
11059        case emdi12_FieldId_SecurityID: {
11060            retval = SecurityID_ReadStrptrMaybe(parent, strval);
11061            break;
11062        }
11063        case emdi12_FieldId_SecurityIDSource: {
11064            retval = true;
11065            break;
11066        }
11067        case emdi12_FieldId_SecurityStatus: {
11068            retval = SecurityStatus_ReadStrptrMaybe(parent, strval);
11069            break;
11070        }
11071        case emdi12_FieldId_SecurityTradingStatus: {
11072            retval = SecurityTradingStatus_ReadStrptrMaybe(parent, strval);
11073            if (retval) {
11074                pmask_qSetBit(parent, 3);
11075            }
11076            break;
11077        }
11078        case emdi12_FieldId_MarketCondition: {
11079            retval = MarketCondition_ReadStrptrMaybe(parent, strval);
11080            break;
11081        }
11082        case emdi12_FieldId_FastMarketIndicator: {
11083            retval = FastMarketIndicator_ReadStrptrMaybe(parent, strval);
11084            break;
11085        }
11086        case emdi12_FieldId_SecurityTradingEvent: {
11087            retval = SecurityTradingEvent_ReadStrptrMaybe(parent, strval);
11088            if (retval) {
11089                pmask_qSetBit(parent, 2);
11090            }
11091            break;
11092        }
11093        case emdi12_FieldId_SoldOutIndicator: {
11094            retval = SoldOutIndicator_ReadStrptrMaybe(parent, strval);
11095            if (retval) {
11096                pmask_qSetBit(parent, 4);
11097            }
11098            break;
11099        }
11100        case emdi12_FieldId_HighPx: {
11101            retval = HighPx_ReadStrptrMaybe(parent, strval);
11102            if (retval) {
11103                pmask_qSetBit(parent, 0);
11104            }
11105            break;
11106        }
11107        case emdi12_FieldId_LowPx: {
11108            retval = LowPx_ReadStrptrMaybe(parent, strval);
11109            if (retval) {
11110                pmask_qSetBit(parent, 1);
11111            }
11112            break;
11113        }
11114        case emdi12_FieldId_TransactTime: {
11115            retval = TransactTime_ReadStrptrMaybe(parent, strval);
11116            break;
11117        }
11118        case emdi12_FieldId_TESSecurityStatus: {
11119            retval = TESSecurityStatus_ReadStrptrMaybe(parent, strval);
11120            if (retval) {
11121                pmask_qSetBit(parent, 5);
11122            }
11123            break;
11124        }
11125        default: break;
11126    }
11127    if (!retval) {
11128        algo_lib::AppendErrtext("attr",field);
11129    }
11130    return retval;
11131}
11132
11133// --- emdi12.InstrumentStateChange..ReadStrptrMaybe
11134// Read fields of emdi12::InstrumentStateChange from an ascii string.
11135// The format of the string is an ssim Tuple
11136bool emdi12::InstrumentStateChange_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) {
11137    bool retval = true;
11138    retval = algo::StripTypeTag(in_str, "emdi12.InstrumentStateChange");
11139    ind_beg(algo::Attr_curs, attr, in_str) {
11140        retval = retval && InstrumentStateChange_ReadFieldMaybe(parent, attr.name, attr.value);
11141    }ind_end;
11142    return retval;
11143}
11144
11145// --- emdi12.InstrumentStateChange..Init
11146// Set all fields to initial values.
11147void emdi12::InstrumentStateChange_Init(emdi12::InstrumentStateChange& parent) {
11148    parent.length = u32(ssizeof(parent) + (0));
11149    parent.id = u32(98);
11150    parent.pmask = u32(0);
11151    parent.MsgSeqNum = u32(0);
11152    parent.SenderCompID = u32(0);
11153    parent.MarketSegmentID = u32(0);
11154    parent.SecurityID = i64(0);
11155    parent.SecurityStatus = emdi12_SecurityStatusEnum(0);
11156    parent.MarketCondition = emdi12_MarketConditionEnum(0);
11157    parent.FastMarketIndicator = emdi12_FastMarketIndicatorEnum(0);
11158    parent.HighPx = algo::Decimal(algo::Decimal(0,0));
11159    parent.LowPx = algo::Decimal(algo::Decimal(0,0));
11160    parent.TransactTime = i64(0);
11161    parent.TESSecurityStatus = emdi12_SecurityStatusEnum(0);
11162}
11163
11164// --- emdi12.InstrumentStateChange..Print
11165// print string representation of ROW to string STR
11166// cfmt:emdi12.InstrumentStateChange.String  printfmt:Tuple
11167void emdi12::InstrumentStateChange_Print(emdi12::InstrumentStateChange& row, algo::cstring& str) {
11168    algo::tempstr temp;
11169    str << "emdi12.InstrumentStateChange";
11170
11171    algo::strptr_Print(MsgType_Get(row), temp);
11172    PrintAttrSpaceReset(str,"MsgType", temp);
11173
11174    u32_Print(row.MsgSeqNum, temp);
11175    PrintAttrSpaceReset(str,"MsgSeqNum", temp);
11176
11177    u32_Print(row.SenderCompID, temp);
11178    PrintAttrSpaceReset(str,"SenderCompID", temp);
11179
11180    u32_Print(row.MarketSegmentID, temp);
11181    PrintAttrSpaceReset(str,"MarketSegmentID", temp);
11182
11183    i64_Print(row.SecurityID, temp);
11184    PrintAttrSpaceReset(str,"SecurityID", temp);
11185
11186    algo::strptr_Print(SecurityIDSource_Get(row), temp);
11187    PrintAttrSpaceReset(str,"SecurityIDSource", temp);
11188
11189    emdi12::SecurityStatus_Print(row.SecurityStatus, temp);
11190    PrintAttrSpaceReset(str,"SecurityStatus", temp);
11191
11192    if (SecurityTradingStatus_PresentQ(row)) {
11193        emdi12::SecurityTradingStatus_Print(row.SecurityTradingStatus, temp);
11194        PrintAttrSpaceReset(str,"SecurityTradingStatus", temp);
11195    }
11196
11197    emdi12::MarketCondition_Print(row.MarketCondition, temp);
11198    PrintAttrSpaceReset(str,"MarketCondition", temp);
11199
11200    emdi12::FastMarketIndicator_Print(row.FastMarketIndicator, temp);
11201    PrintAttrSpaceReset(str,"FastMarketIndicator", temp);
11202
11203    if (SecurityTradingEvent_PresentQ(row)) {
11204        emdi12::SecurityTradingEvent_Print(row.SecurityTradingEvent, temp);
11205        PrintAttrSpaceReset(str,"SecurityTradingEvent", temp);
11206    }
11207
11208    if (SoldOutIndicator_PresentQ(row)) {
11209        emdi12::SoldOutIndicator_Print(row.SoldOutIndicator, temp);
11210        PrintAttrSpaceReset(str,"SoldOutIndicator", temp);
11211    }
11212
11213    if (HighPx_PresentQ(row)) {
11214        algo::Decimal_Print(row.HighPx, temp);
11215        PrintAttrSpaceReset(str,"HighPx", temp);
11216    }
11217
11218    if (LowPx_PresentQ(row)) {
11219        algo::Decimal_Print(row.LowPx, temp);
11220        PrintAttrSpaceReset(str,"LowPx", temp);
11221    }
11222
11223    i64_Print(row.TransactTime, temp);
11224    PrintAttrSpaceReset(str,"TransactTime", temp);
11225
11226    if (TESSecurityStatus_PresentQ(row)) {
11227        emdi12::SecurityStatus_Print(row.TESSecurityStatus, temp);
11228        PrintAttrSpaceReset(str,"TESSecurityStatus", temp);
11229    }
11230}
11231
11232// --- emdi12.InstrumentStateChange..FastEncode
11233void emdi12::InstrumentStateChange_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::InstrumentStateChange& parent) {
11234    int index = ary_N(buf);
11235    u64 pmap(0);
11236    if (!tid_AssignedQ(state) || parent.id != state.tid) {
11237        lib_fast::EncodeUnsigned(buf,parent.id,false);
11238        lib_fast::SetPmapBit(pmap,0);
11239    }
11240    tid_SetAssigned(state);
11241    state.tid = parent.id;
11242    // MsgType string constant mandatory
11243    // MsgSeqNum unsigned increment mandatory
11244    if (MsgSeqNum_AssignedQ(state)) {
11245        if (parent.MsgSeqNum != state.MsgSeqNum + 1) {
11246            lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
11247            lib_fast::SetPmapBit(pmap,1);
11248        }
11249    } else {
11250        lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
11251        lib_fast::SetPmapBit(pmap,1);
11252    }
11253    state.MsgSeqNum = parent.MsgSeqNum;
11254    MsgSeqNum_SetAssigned(state);
11255    // SenderCompID unsigned copy mandatory
11256    if (!SenderCompID_AssignedQ(state) || parent.SenderCompID != state.SenderCompID) {
11257        lib_fast::EncodeUnsigned(buf,parent.SenderCompID,false);
11258        lib_fast::SetPmapBit(pmap,2);
11259    }
11260    state.SenderCompID = parent.SenderCompID;
11261    SenderCompID_SetAssigned(state);
11262    // MarketSegmentID unsigned copy mandatory
11263    if (!MarketSegmentID_AssignedQ(state) || parent.MarketSegmentID != state.MarketSegmentID) {
11264        lib_fast::EncodeUnsigned(buf,parent.MarketSegmentID,false);
11265        lib_fast::SetPmapBit(pmap,3);
11266    }
11267    state.MarketSegmentID = parent.MarketSegmentID;
11268    MarketSegmentID_SetAssigned(state);
11269    // SecurityID signed none mandatory
11270    lib_fast::EncodeSigned(buf,parent.SecurityID,false);
11271    // SecurityIDSource string constant mandatory
11272    // SecurityStatus type default mandatory
11273    if (parent.SecurityStatus.value != 0) {
11274        lib_fast::EncodeUnsigned(buf,parent.SecurityStatus.value,false);
11275        lib_fast::SetPmapBit(pmap,4);
11276    }
11277    // SecurityTradingStatus type copy optional
11278    if (SecurityTradingStatus_PresentQ(parent)) {
11279        if (!SecurityTradingStatus_AssignedQ(state) || !SecurityTradingStatus_PresentQ(state) ||  parent.SecurityTradingStatus.value != state.SecurityTradingStatus.value ) {
11280            lib_fast::EncodeUnsigned(buf,parent.SecurityTradingStatus.value,true);
11281            lib_fast::SetPmapBit(pmap,5);
11282        }
11283    } else {
11284        if (SecurityTradingStatus_AssignedQ(state)) {
11285            lib_fast::EncodeNull(buf);
11286            lib_fast::SetPmapBit(pmap,5);
11287        }
11288    }
11289    state.SecurityTradingStatus.value = parent.SecurityTradingStatus.value;
11290    present_qSetBitVal(state,SecurityTradingStatus_Present_GetBit(state),SecurityTradingStatus_PresentQ(parent));
11291    SecurityTradingStatus_SetAssigned(state);
11292    // MarketCondition type default mandatory
11293    if (parent.MarketCondition.value != 0) {
11294        lib_fast::EncodeUnsigned(buf,parent.MarketCondition.value,false);
11295        lib_fast::SetPmapBit(pmap,6);
11296    }
11297    // FastMarketIndicator type default mandatory
11298    if (parent.FastMarketIndicator.value != 0) {
11299        lib_fast::EncodeUnsigned(buf,parent.FastMarketIndicator.value,false);
11300        lib_fast::SetPmapBit(pmap,7);
11301    }
11302    // SecurityTradingEvent type copy optional
11303    if (SecurityTradingEvent_PresentQ(parent)) {
11304        if (!SecurityTradingEvent_AssignedQ(state) || !SecurityTradingEvent_PresentQ(state) ||  parent.SecurityTradingEvent.value != state.SecurityTradingEvent.value ) {
11305            lib_fast::EncodeUnsigned(buf,parent.SecurityTradingEvent.value,true);
11306            lib_fast::SetPmapBit(pmap,8);
11307        }
11308    } else {
11309        if (SecurityTradingEvent_AssignedQ(state)) {
11310            lib_fast::EncodeNull(buf);
11311            lib_fast::SetPmapBit(pmap,8);
11312        }
11313    }
11314    state.SecurityTradingEvent.value = parent.SecurityTradingEvent.value;
11315    present_qSetBitVal(state,SecurityTradingEvent_Present_GetBit(state),SecurityTradingEvent_PresentQ(parent));
11316    SecurityTradingEvent_SetAssigned(state);
11317    // SoldOutIndicator type copy optional
11318    if (SoldOutIndicator_PresentQ(parent)) {
11319        if (!SoldOutIndicator_AssignedQ(state) || !SoldOutIndicator_PresentQ(state) ||  parent.SoldOutIndicator.value != state.SoldOutIndicator.value ) {
11320            lib_fast::EncodeUnsigned(buf,parent.SoldOutIndicator.value,true);
11321            lib_fast::SetPmapBit(pmap,9);
11322        }
11323    } else {
11324        if (SoldOutIndicator_AssignedQ(state)) {
11325            lib_fast::EncodeNull(buf);
11326            lib_fast::SetPmapBit(pmap,9);
11327        }
11328    }
11329    state.SoldOutIndicator.value = parent.SoldOutIndicator.value;
11330    present_qSetBitVal(state,SoldOutIndicator_Present_GetBit(state),SoldOutIndicator_PresentQ(parent));
11331    SoldOutIndicator_SetAssigned(state);
11332    // HighPx scaled copy optional
11333    if (HighPx_PresentQ(parent)) {
11334        if (HighPx_AssignedQ(state) ? !HighPx_PresentQ(state) || parent.HighPx != state.HighPx : parent.HighPx != algo::Decimal(0,0)) {
11335            lib_fast::EncodeScaled(buf,parent.HighPx,true);
11336            lib_fast::SetPmapBit(pmap,10);
11337        }
11338    } else {
11339        if (HighPx_AssignedQ(state) && HighPx_PresentQ(state)) {
11340            lib_fast::EncodeNull(buf);
11341            lib_fast::SetPmapBit(pmap,10);
11342        }
11343    }
11344    state.HighPx = parent.HighPx;
11345    present_qSetBitVal(state,HighPx_Present_GetBit(state),HighPx_PresentQ(parent));
11346    HighPx_SetAssigned(state);
11347    // LowPx scaled copy optional
11348    if (LowPx_PresentQ(parent)) {
11349        if (LowPx_AssignedQ(state) ? !LowPx_PresentQ(state) || parent.LowPx != state.LowPx : parent.LowPx != algo::Decimal(0,0)) {
11350            lib_fast::EncodeScaled(buf,parent.LowPx,true);
11351            lib_fast::SetPmapBit(pmap,11);
11352        }
11353    } else {
11354        if (LowPx_AssignedQ(state) && LowPx_PresentQ(state)) {
11355            lib_fast::EncodeNull(buf);
11356            lib_fast::SetPmapBit(pmap,11);
11357        }
11358    }
11359    state.LowPx = parent.LowPx;
11360    present_qSetBitVal(state,LowPx_Present_GetBit(state),LowPx_PresentQ(parent));
11361    LowPx_SetAssigned(state);
11362    // TransactTime signed delta mandatory
11363    if (!TransactTime_AssignedQ(state)) {
11364        TransactTime_SetAssigned(state);
11365        state.TransactTime = 0;
11366    }
11367    lib_fast::EncodeDeltaSigned(buf,state.TransactTime,parent.TransactTime,false);
11368    state.TransactTime = parent.TransactTime;
11369    // TESSecurityStatus type default optional
11370    if (TESSecurityStatus_PresentQ(parent)) {
11371        if (parent.TESSecurityStatus.value != 0) {
11372            lib_fast::EncodeUnsigned(buf,parent.TESSecurityStatus.value,true);
11373            lib_fast::SetPmapBit(pmap,12);
11374        }
11375    } else {
11376        lib_fast::EncodeNull(buf);
11377        lib_fast::SetPmapBit(pmap,12);
11378    }
11379    lib_fast::InsertPmap(buf,index,pmap);
11380}
11381
11382// --- emdi12.InstrumentStateChange..FastDecode
11383bool emdi12::InstrumentStateChange_FastDecode(algo::memptr& from, u64 pmap, FastState& state, emdi12::InstrumentStateChange& parent) {
11384    bool ok = true;
11385    // MsgType string constant mandatory
11386    if (ok) {
11387    }
11388    // MsgSeqNum unsigned increment mandatory
11389    if (ok) {
11390        bool prs = lib_fast::GetPmapBit(pmap,1);
11391        if (prs) {
11392            ok = lib_fast::DecodeUnsigned(from,parent.MsgSeqNum,false);
11393            if (!ok) {
11394                state.error << "emdi12.InstrumentStateChange.MsgSeqNum: bad Unsigned" << eol;
11395            }
11396        } else if (MsgSeqNum_AssignedQ(state)) {
11397            parent.MsgSeqNum = state.MsgSeqNum + 1;
11398        } else {
11399            ok = false;
11400            state.error << "emdi12.InstrumentStateChange.MsgSeqNum: increment operator: previous value unassigned" << eol;
11401        }
11402        MsgSeqNum_SetAssigned(state);
11403        state.MsgSeqNum = parent.MsgSeqNum;
11404    }
11405    // SenderCompID unsigned copy mandatory
11406    if (ok) {
11407        bool prs = lib_fast::GetPmapBit(pmap,2);
11408        if (prs) {
11409            ok = lib_fast::DecodeUnsigned(from,parent.SenderCompID,false);
11410            if (!ok) {
11411                state.error << "emdi12.InstrumentStateChange.SenderCompID: bad Unsigned" << eol;
11412            }
11413        } else if (SenderCompID_AssignedQ(state)) {
11414            parent.SenderCompID = state.SenderCompID;
11415        } else {
11416            ok = false;
11417            state.error << "emdi12.InstrumentStateChange.SenderCompID: copy operator: previous value unassigned" << eol;
11418        }
11419        SenderCompID_SetAssigned(state);
11420        state.SenderCompID = parent.SenderCompID;
11421    }
11422    // MarketSegmentID unsigned copy mandatory
11423    if (ok) {
11424        bool prs = lib_fast::GetPmapBit(pmap,3);
11425        if (prs) {
11426            ok = lib_fast::DecodeUnsigned(from,parent.MarketSegmentID,false);
11427            if (!ok) {
11428                state.error << "emdi12.InstrumentStateChange.MarketSegmentID: bad Unsigned" << eol;
11429            }
11430        } else if (MarketSegmentID_AssignedQ(state)) {
11431            parent.MarketSegmentID = state.MarketSegmentID;
11432        } else {
11433            ok = false;
11434            state.error << "emdi12.InstrumentStateChange.MarketSegmentID: copy operator: previous value unassigned" << eol;
11435        }
11436        MarketSegmentID_SetAssigned(state);
11437        state.MarketSegmentID = parent.MarketSegmentID;
11438    }
11439    // SecurityID signed none mandatory
11440    if (ok) {
11441        ok = lib_fast::DecodeSigned(from,parent.SecurityID,false);
11442        if (!ok) {
11443            state.error << "emdi12.InstrumentStateChange.SecurityID: bad Signed" << eol;
11444        }
11445    }
11446    // SecurityIDSource string constant mandatory
11447    if (ok) {
11448    }
11449    // SecurityStatus type default mandatory
11450    if (ok) {
11451        bool prs = lib_fast::GetPmapBit(pmap,4);
11452        if (prs) {
11453            ok = lib_fast::DecodeUnsigned(from,parent.SecurityStatus.value,false);
11454            if (!ok) {
11455                state.error << "emdi12.InstrumentStateChange.SecurityStatus: bad Unsigned" << eol;
11456            }
11457        } else {
11458            parent.SecurityStatus.value = 0;
11459        }
11460    }
11461    // SecurityTradingStatus type copy optional
11462    if (ok) {
11463        bool prs = lib_fast::GetPmapBit(pmap,5);
11464        if (prs) {
11465            prs = !lib_fast::DecodeNull(from);
11466            if (prs) {
11467                ok = lib_fast::DecodeUnsigned(from,parent.SecurityTradingStatus.value,true);
11468                if (!ok) {
11469                    state.error << "emdi12.InstrumentStateChange.SecurityTradingStatus: bad Unsigned" << eol;
11470                }
11471            }
11472        } else if (SecurityTradingStatus_AssignedQ(state)) {
11473            parent.SecurityTradingStatus.value = state.SecurityTradingStatus.value;
11474            prs = SecurityTradingStatus_PresentQ(state);
11475        } else {
11476            prs = false;
11477        }
11478        pmask_qSetBitVal(parent,SecurityTradingStatus_Present_GetBit(parent),prs);
11479        SecurityTradingStatus_SetAssigned(state);
11480        present_qSetBitVal(state,SecurityTradingStatus_Present_GetBit(state),prs);
11481        state.SecurityTradingStatus.value = parent.SecurityTradingStatus.value;
11482    }
11483    // MarketCondition type default mandatory
11484    if (ok) {
11485        bool prs = lib_fast::GetPmapBit(pmap,6);
11486        if (prs) {
11487            ok = lib_fast::DecodeUnsigned(from,parent.MarketCondition.value,false);
11488            if (!ok) {
11489                state.error << "emdi12.InstrumentStateChange.MarketCondition: bad Unsigned" << eol;
11490            }
11491        } else {
11492            parent.MarketCondition.value = 0;
11493        }
11494    }
11495    // FastMarketIndicator type default mandatory
11496    if (ok) {
11497        bool prs = lib_fast::GetPmapBit(pmap,7);
11498        if (prs) {
11499            ok = lib_fast::DecodeUnsigned(from,parent.FastMarketIndicator.value,false);
11500            if (!ok) {
11501                state.error << "emdi12.InstrumentStateChange.FastMarketIndicator: bad Unsigned" << eol;
11502            }
11503        } else {
11504            parent.FastMarketIndicator.value = 0;
11505        }
11506    }
11507    // SecurityTradingEvent type copy optional
11508    if (ok) {
11509        bool prs = lib_fast::GetPmapBit(pmap,8);
11510        if (prs) {
11511            prs = !lib_fast::DecodeNull(from);
11512            if (prs) {
11513                ok = lib_fast::DecodeUnsigned(from,parent.SecurityTradingEvent.value,true);
11514                if (!ok) {
11515                    state.error << "emdi12.InstrumentStateChange.SecurityTradingEvent: bad Unsigned" << eol;
11516                }
11517            }
11518        } else if (SecurityTradingEvent_AssignedQ(state)) {
11519            parent.SecurityTradingEvent.value = state.SecurityTradingEvent.value;
11520            prs = SecurityTradingEvent_PresentQ(state);
11521        } else {
11522            prs = false;
11523        }
11524        pmask_qSetBitVal(parent,SecurityTradingEvent_Present_GetBit(parent),prs);
11525        SecurityTradingEvent_SetAssigned(state);
11526        present_qSetBitVal(state,SecurityTradingEvent_Present_GetBit(state),prs);
11527        state.SecurityTradingEvent.value = parent.SecurityTradingEvent.value;
11528    }
11529    // SoldOutIndicator type copy optional
11530    if (ok) {
11531        bool prs = lib_fast::GetPmapBit(pmap,9);
11532        if (prs) {
11533            prs = !lib_fast::DecodeNull(from);
11534            if (prs) {
11535                ok = lib_fast::DecodeUnsigned(from,parent.SoldOutIndicator.value,true);
11536                if (!ok) {
11537                    state.error << "emdi12.InstrumentStateChange.SoldOutIndicator: bad Unsigned" << eol;
11538                }
11539            }
11540        } else if (SoldOutIndicator_AssignedQ(state)) {
11541            parent.SoldOutIndicator.value = state.SoldOutIndicator.value;
11542            prs = SoldOutIndicator_PresentQ(state);
11543        } else {
11544            prs = false;
11545        }
11546        pmask_qSetBitVal(parent,SoldOutIndicator_Present_GetBit(parent),prs);
11547        SoldOutIndicator_SetAssigned(state);
11548        present_qSetBitVal(state,SoldOutIndicator_Present_GetBit(state),prs);
11549        state.SoldOutIndicator.value = parent.SoldOutIndicator.value;
11550    }
11551    // HighPx scaled copy optional
11552    if (ok) {
11553        bool prs = lib_fast::GetPmapBit(pmap,10);
11554        if (prs) {
11555            prs = !lib_fast::DecodeNull(from);
11556            if (prs) {
11557                ok = lib_fast::DecodeScaled(from,parent.HighPx,true);
11558                if (!ok) {
11559                    state.error << "emdi12.InstrumentStateChange.HighPx: bad Scaled" << eol;
11560                }
11561            }
11562        } else if (HighPx_AssignedQ(state)) {
11563            parent.HighPx = state.HighPx;
11564            prs = HighPx_PresentQ(state);
11565        } else {
11566            parent.HighPx = algo::Decimal(0,0);
11567            prs = true;
11568        }
11569        pmask_qSetBitVal(parent,HighPx_Present_GetBit(parent),prs);
11570        HighPx_SetAssigned(state);
11571        present_qSetBitVal(state,HighPx_Present_GetBit(state),prs);
11572        state.HighPx = parent.HighPx;
11573    }
11574    // LowPx scaled copy optional
11575    if (ok) {
11576        bool prs = lib_fast::GetPmapBit(pmap,11);
11577        if (prs) {
11578            prs = !lib_fast::DecodeNull(from);
11579            if (prs) {
11580                ok = lib_fast::DecodeScaled(from,parent.LowPx,true);
11581                if (!ok) {
11582                    state.error << "emdi12.InstrumentStateChange.LowPx: bad Scaled" << eol;
11583                }
11584            }
11585        } else if (LowPx_AssignedQ(state)) {
11586            parent.LowPx = state.LowPx;
11587            prs = LowPx_PresentQ(state);
11588        } else {
11589            parent.LowPx = algo::Decimal(0,0);
11590            prs = true;
11591        }
11592        pmask_qSetBitVal(parent,LowPx_Present_GetBit(parent),prs);
11593        LowPx_SetAssigned(state);
11594        present_qSetBitVal(state,LowPx_Present_GetBit(state),prs);
11595        state.LowPx = parent.LowPx;
11596    }
11597    // TransactTime signed delta mandatory
11598    if (ok) {
11599        if (!TransactTime_AssignedQ(state)) {
11600            TransactTime_SetAssigned(state);
11601            state.TransactTime = 0;
11602        }
11603        ok = lib_fast::DecodeDeltaSigned(from,state.TransactTime,parent.TransactTime,false);
11604        if (!ok) {
11605            state.error << "emdi12.InstrumentStateChange.TransactTime: bad Signed delta" << eol;
11606        }
11607        state.TransactTime = parent.TransactTime;
11608    }
11609    // TESSecurityStatus type default optional
11610    if (ok) {
11611        bool prs = lib_fast::GetPmapBit(pmap,12);
11612        if (prs) {
11613            prs = !lib_fast::DecodeNull(from);
11614            if (prs) {
11615                ok = lib_fast::DecodeUnsigned(from,parent.TESSecurityStatus.value,true);
11616                if (!ok) {
11617                    state.error << "emdi12.InstrumentStateChange.TESSecurityStatus: bad Unsigned" << eol;
11618                }
11619            }
11620        } else {
11621            parent.TESSecurityStatus.value = 0;
11622            prs = true;
11623        }
11624        pmask_qSetBitVal(parent,TESSecurityStatus_Present_GetBit(parent),prs);
11625    }
11626    return ok;
11627}
11628
11629// --- emdi12.InstrumentStateChange..FixEncode
11630void emdi12::InstrumentStateChange_FixEncode(cstring& buf, emdi12::InstrumentStateChange& parent, char soh) {
11631    buf << "35=" << MsgType_Get(parent) << soh;
11632    buf << "34=" << parent.MsgSeqNum << soh;
11633    buf << "49=" << parent.SenderCompID << soh;
11634    buf << "1300=" << parent.MarketSegmentID << soh;
11635    buf << "48=" << parent.SecurityID << soh;
11636    buf << "22=" << SecurityIDSource_Get(parent) << soh;
11637    buf << "965=" << parent.SecurityStatus << soh;
11638    if (SecurityTradingStatus_PresentQ(parent)) {
11639        buf << "326=" << parent.SecurityTradingStatus << soh;
11640    }
11641    buf << "2705=" << parent.MarketCondition << soh;
11642    buf << "2447=" << parent.FastMarketIndicator << soh;
11643    if (SecurityTradingEvent_PresentQ(parent)) {
11644        buf << "1174=" << parent.SecurityTradingEvent << soh;
11645    }
11646    if (SoldOutIndicator_PresentQ(parent)) {
11647        buf << "25155=" << parent.SoldOutIndicator << soh;
11648    }
11649    if (HighPx_PresentQ(parent)) {
11650        buf << "332=" << parent.HighPx << soh;
11651    }
11652    if (LowPx_PresentQ(parent)) {
11653        buf << "333=" << parent.LowPx << soh;
11654    }
11655    buf << "60=" << parent.TransactTime << soh;
11656    if (TESSecurityStatus_PresentQ(parent)) {
11657        buf << "25045=" << parent.TESSecurityStatus << soh;
11658    }
11659}
11660
11661// --- emdi12.MDIncGrp2.MDUpdateAction.ReadStrptrMaybe
11662inline static bool emdi12::MDUpdateAction_ReadStrptrMaybe(emdi12::MDIncGrp2 &parent, algo::strptr in_str) {
11663    bool retval = true;
11664    retval = emdi12::MDUpdateAction_ReadStrptrMaybe(parent.MDUpdateAction, in_str);
11665    return retval;
11666}
11667
11668// --- emdi12.MDIncGrp2.MDEntryType.ReadStrptrMaybe
11669inline static bool emdi12::MDEntryType_ReadStrptrMaybe(emdi12::MDIncGrp2 &parent, algo::strptr in_str) {
11670    bool retval = true;
11671    retval = emdi12::MDEntryType_ReadStrptrMaybe(parent.MDEntryType, in_str);
11672    return retval;
11673}
11674
11675// --- emdi12.MDIncGrp2.MDSubBookType.ReadStrptrMaybe
11676inline static bool emdi12::MDSubBookType_ReadStrptrMaybe(emdi12::MDIncGrp2 &parent, algo::strptr in_str) {
11677    bool retval = true;
11678    retval = emdi12::MDSubBookType_ReadStrptrMaybe(parent.MDSubBookType, in_str);
11679    return retval;
11680}
11681
11682// --- emdi12.MDIncGrp2.SecurityID.ReadStrptrMaybe
11683inline static bool emdi12::SecurityID_ReadStrptrMaybe(emdi12::MDIncGrp2 &parent, algo::strptr in_str) {
11684    bool retval = true;
11685    retval = i64_ReadStrptrMaybe(parent.SecurityID, in_str);
11686    return retval;
11687}
11688
11689// --- emdi12.MDIncGrp2.MDEntryPx.ReadStrptrMaybe
11690inline static bool emdi12::MDEntryPx_ReadStrptrMaybe(emdi12::MDIncGrp2 &parent, algo::strptr in_str) {
11691    bool retval = true;
11692    algo::Decimal MDEntryPx_tmp;
11693    retval = algo::Decimal_ReadStrptrMaybe(MDEntryPx_tmp, in_str);
11694    if (retval) {
11695        MDEntryPx_Set(parent, MDEntryPx_tmp);
11696    }
11697    return retval;
11698}
11699
11700// --- emdi12.MDIncGrp2.MDEntrySize.ReadStrptrMaybe
11701inline static bool emdi12::MDEntrySize_ReadStrptrMaybe(emdi12::MDIncGrp2 &parent, algo::strptr in_str) {
11702    bool retval = true;
11703    algo::Decimal MDEntrySize_tmp;
11704    retval = algo::Decimal_ReadStrptrMaybe(MDEntrySize_tmp, in_str);
11705    if (retval) {
11706        MDEntrySize_Set(parent, MDEntrySize_tmp);
11707    }
11708    return retval;
11709}
11710
11711// --- emdi12.MDIncGrp2.MDEntryTime.ReadStrptrMaybe
11712inline static bool emdi12::MDEntryTime_ReadStrptrMaybe(emdi12::MDIncGrp2 &parent, algo::strptr in_str) {
11713    bool retval = true;
11714    i64 MDEntryTime_tmp;
11715    retval = i64_ReadStrptrMaybe(MDEntryTime_tmp, in_str);
11716    if (retval) {
11717        MDEntryTime_Set(parent, MDEntryTime_tmp);
11718    }
11719    return retval;
11720}
11721
11722// --- emdi12.MDIncGrp2.QuoteCondition.ReadStrptrMaybe
11723inline static bool emdi12::QuoteCondition_ReadStrptrMaybe(emdi12::MDIncGrp2 &parent, algo::strptr in_str) {
11724    bool retval = true;
11725    emdi12::QuoteCondition QuoteCondition_tmp;
11726    retval = emdi12::QuoteCondition_ReadStrptrMaybe(QuoteCondition_tmp, in_str);
11727    if (retval) {
11728        QuoteCondition_Set(parent, QuoteCondition_tmp);
11729    }
11730    return retval;
11731}
11732
11733// --- emdi12.MDIncGrp2.pmask_bitcurs.Next
11734// proceed to next item
11735void emdi12::MDIncGrp2_pmask_bitcurs_Next(MDIncGrp2_pmask_bitcurs &curs) {
11736    ++curs.bit;
11737    int index = curs.bit / 32;
11738    int offset = curs.bit % 32;
11739    for (; index < curs.n_elems; ++index, offset = 0) {
11740        u64 rest = curs.elems[index] >> offset;
11741        if (rest) {
11742            offset += algo::u64_BitScanForward(rest);
11743            break;
11744        }
11745    }
11746    curs.bit = index * 32 + offset;
11747}
11748
11749// --- emdi12.MDIncGrp2..ReadFieldMaybe
11750bool emdi12::MDIncGrp2_ReadFieldMaybe(emdi12::MDIncGrp2& parent, algo::strptr field, algo::strptr strval) {
11751    bool retval = true;
11752    emdi12::FieldId field_id;
11753    (void)value_SetStrptrMaybe(field_id,field);
11754    switch(field_id) {
11755        case emdi12_FieldId_pmask: {
11756            retval = false;
11757            break;
11758        }
11759        case emdi12_FieldId_MDUpdateAction: {
11760            retval = MDUpdateAction_ReadStrptrMaybe(parent, strval);
11761            break;
11762        }
11763        case emdi12_FieldId_MDEntryType: {
11764            retval = MDEntryType_ReadStrptrMaybe(parent, strval);
11765            break;
11766        }
11767        case emdi12_FieldId_MDBookType: {
11768            retval = true;
11769            break;
11770        }
11771        case emdi12_FieldId_MDSubBookType: {
11772            retval = MDSubBookType_ReadStrptrMaybe(parent, strval);
11773            break;
11774        }
11775        case emdi12_FieldId_SecurityID: {
11776            retval = SecurityID_ReadStrptrMaybe(parent, strval);
11777            break;
11778        }
11779        case emdi12_FieldId_SecurityIDSource: {
11780            retval = true;
11781            break;
11782        }
11783        case emdi12_FieldId_MDEntryPx: {
11784            retval = MDEntryPx_ReadStrptrMaybe(parent, strval);
11785            if (retval) {
11786                pmask_qSetBit(parent, 0);
11787            }
11788            break;
11789        }
11790        case emdi12_FieldId_MDEntrySize: {
11791            retval = MDEntrySize_ReadStrptrMaybe(parent, strval);
11792            if (retval) {
11793                pmask_qSetBit(parent, 1);
11794            }
11795            break;
11796        }
11797        case emdi12_FieldId_MDEntryTime: {
11798            retval = MDEntryTime_ReadStrptrMaybe(parent, strval);
11799            if (retval) {
11800                pmask_qSetBit(parent, 2);
11801            }
11802            break;
11803        }
11804        case emdi12_FieldId_QuoteCondition: {
11805            retval = QuoteCondition_ReadStrptrMaybe(parent, strval);
11806            if (retval) {
11807                pmask_qSetBit(parent, 3);
11808            }
11809            break;
11810        }
11811        default: break;
11812    }
11813    if (!retval) {
11814        algo_lib::AppendErrtext("attr",field);
11815    }
11816    return retval;
11817}
11818
11819// --- emdi12.MDIncGrp2..ReadStrptrMaybe
11820// Read fields of emdi12::MDIncGrp2 from an ascii string.
11821// The format of the string is an ssim Tuple
11822bool emdi12::MDIncGrp2_ReadStrptrMaybe(emdi12::MDIncGrp2 &parent, algo::strptr in_str) {
11823    bool retval = true;
11824    retval = algo::StripTypeTag(in_str, "emdi12.MDIncGrp2");
11825    ind_beg(algo::Attr_curs, attr, in_str) {
11826        retval = retval && MDIncGrp2_ReadFieldMaybe(parent, attr.name, attr.value);
11827    }ind_end;
11828    return retval;
11829}
11830
11831// --- emdi12.MDIncGrp2..Init
11832// Set all fields to initial values.
11833void emdi12::MDIncGrp2_Init(emdi12::MDIncGrp2& MDIncGrp2) {
11834    MDIncGrp2.pmask = u32(0);
11835    MDIncGrp2.SecurityID = i64(0);
11836    MDIncGrp2.MDEntryPx = algo::Decimal(algo::Decimal(0,0));
11837    MDIncGrp2.MDEntrySize = algo::Decimal(algo::Decimal(0,0));
11838    MDIncGrp2.MDEntryTime = i64(0);
11839}
11840
11841// --- emdi12.MDIncGrp2..Print
11842// print string representation of ROW to string STR
11843// cfmt:emdi12.MDIncGrp2.String  printfmt:Tuple
11844void emdi12::MDIncGrp2_Print(emdi12::MDIncGrp2& row, algo::cstring& str) {
11845    algo::tempstr temp;
11846    str << "emdi12.MDIncGrp2";
11847
11848    emdi12::MDUpdateAction_Print(row.MDUpdateAction, temp);
11849    PrintAttrSpaceReset(str,"MDUpdateAction", temp);
11850
11851    emdi12::MDEntryType_Print(row.MDEntryType, temp);
11852    PrintAttrSpaceReset(str,"MDEntryType", temp);
11853
11854    emdi12::MDBookType_Print(MDBookType_Get(row), temp);
11855    PrintAttrSpaceReset(str,"MDBookType", temp);
11856
11857    emdi12::MDSubBookType_Print(row.MDSubBookType, temp);
11858    PrintAttrSpaceReset(str,"MDSubBookType", temp);
11859
11860    i64_Print(row.SecurityID, temp);
11861    PrintAttrSpaceReset(str,"SecurityID", temp);
11862
11863    algo::strptr_Print(SecurityIDSource_Get(row), temp);
11864    PrintAttrSpaceReset(str,"SecurityIDSource", temp);
11865
11866    if (MDEntryPx_PresentQ(row)) {
11867        algo::Decimal_Print(row.MDEntryPx, temp);
11868        PrintAttrSpaceReset(str,"MDEntryPx", temp);
11869    }
11870
11871    if (MDEntrySize_PresentQ(row)) {
11872        algo::Decimal_Print(row.MDEntrySize, temp);
11873        PrintAttrSpaceReset(str,"MDEntrySize", temp);
11874    }
11875
11876    if (MDEntryTime_PresentQ(row)) {
11877        i64_Print(row.MDEntryTime, temp);
11878        PrintAttrSpaceReset(str,"MDEntryTime", temp);
11879    }
11880
11881    if (QuoteCondition_PresentQ(row)) {
11882        emdi12::QuoteCondition_Print(row.QuoteCondition, temp);
11883        PrintAttrSpaceReset(str,"QuoteCondition", temp);
11884    }
11885}
11886
11887// --- emdi12.MDIncGrp2..FastEncode
11888void emdi12::MDIncGrp2_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::MDIncGrp2& parent) {
11889    int index = ary_N(buf);
11890    u64 pmap(0);
11891    // MDUpdateAction type copy mandatory
11892    if (!MDUpdateAction_AssignedQ(state) || parent.MDUpdateAction.value != state.MDUpdateAction.value) {
11893        lib_fast::EncodeUnsigned(buf,parent.MDUpdateAction.value,false);
11894        lib_fast::SetPmapBit(pmap,0);
11895    }
11896    state.MDUpdateAction.value = parent.MDUpdateAction.value;
11897    MDUpdateAction_SetAssigned(state);
11898    // MDEntryType type copy mandatory
11899    if (!MDEntryType_AssignedQ(state) || parent.MDEntryType.value != state.MDEntryType.value) {
11900        lib_fast::EncodeUnsigned(buf,parent.MDEntryType.value,false);
11901        lib_fast::SetPmapBit(pmap,1);
11902    }
11903    state.MDEntryType.value = parent.MDEntryType.value;
11904    MDEntryType_SetAssigned(state);
11905    // MDBookType type constant mandatory
11906    // MDSubBookType type copy mandatory
11907    if (!MDSubBookType_AssignedQ(state) || parent.MDSubBookType.value != state.MDSubBookType.value) {
11908        lib_fast::EncodeUnsigned(buf,parent.MDSubBookType.value,false);
11909        lib_fast::SetPmapBit(pmap,2);
11910    }
11911    state.MDSubBookType.value = parent.MDSubBookType.value;
11912    MDSubBookType_SetAssigned(state);
11913    // SecurityID signed copy mandatory
11914    if (!SecurityID_AssignedQ(state) || parent.SecurityID != state.SecurityID) {
11915        lib_fast::EncodeSigned(buf,parent.SecurityID,false);
11916        lib_fast::SetPmapBit(pmap,3);
11917    }
11918    state.SecurityID = parent.SecurityID;
11919    SecurityID_SetAssigned(state);
11920    // SecurityIDSource string constant mandatory
11921    // MDEntryPx scaled delta optional
11922    if (!MDEntryPx_AssignedQ(state)) {
11923        MDEntryPx_SetAssigned(state);
11924        present_qSetBitVal(state,MDEntryPx_Present_GetBit(state),MDEntryPx_PresentQ(parent));
11925        state.MDEntryPx = algo::Decimal(0,0);
11926    }
11927    if (MDEntryPx_PresentQ(parent)) {
11928        if (!MDEntryPx_PresentQ(state)) {
11929            state.MDEntryPx = algo::Decimal(0,0);
11930        }
11931        lib_fast::EncodeDeltaScaled(buf,state.MDEntryPx,parent.MDEntryPx,true);
11932    } else {
11933        lib_fast::EncodeNull(buf);
11934    }
11935    state.MDEntryPx = parent.MDEntryPx;
11936    present_qSetBitVal(state,MDEntryPx_Present_GetBit(state),MDEntryPx_PresentQ(parent));
11937    // MDEntrySize scaled delta optional
11938    if (!MDEntrySize_AssignedQ(state)) {
11939        MDEntrySize_SetAssigned(state);
11940        present_qSetBitVal(state,MDEntrySize_Present_GetBit(state),MDEntrySize_PresentQ(parent));
11941        state.MDEntrySize = algo::Decimal(0,0);
11942    }
11943    if (MDEntrySize_PresentQ(parent)) {
11944        if (!MDEntrySize_PresentQ(state)) {
11945            state.MDEntrySize = algo::Decimal(0,0);
11946        }
11947        lib_fast::EncodeDeltaScaled(buf,state.MDEntrySize,parent.MDEntrySize,true);
11948    } else {
11949        lib_fast::EncodeNull(buf);
11950    }
11951    state.MDEntrySize = parent.MDEntrySize;
11952    present_qSetBitVal(state,MDEntrySize_Present_GetBit(state),MDEntrySize_PresentQ(parent));
11953    // MDEntryTime signed copy optional
11954    if (MDEntryTime_PresentQ(parent)) {
11955        if (!MDEntryTime_AssignedQ(state) || !MDEntryTime_PresentQ(state) ||  parent.MDEntryTime != state.MDEntryTime ) {
11956            lib_fast::EncodeSigned(buf,parent.MDEntryTime,true);
11957            lib_fast::SetPmapBit(pmap,4);
11958        }
11959    } else {
11960        if (MDEntryTime_AssignedQ(state)) {
11961            lib_fast::EncodeNull(buf);
11962            lib_fast::SetPmapBit(pmap,4);
11963        }
11964    }
11965    state.MDEntryTime = parent.MDEntryTime;
11966    present_qSetBitVal(state,MDEntryTime_Present_GetBit(state),MDEntryTime_PresentQ(parent));
11967    MDEntryTime_SetAssigned(state);
11968    // QuoteCondition type copy optional
11969    if (QuoteCondition_PresentQ(parent)) {
11970        if (!QuoteCondition_AssignedQ(state) || !QuoteCondition_PresentQ(state) ||  parent.QuoteCondition.value != state.QuoteCondition.value ) {
11971            lib_fast::EncodeUnsigned(buf,parent.QuoteCondition.value,true);
11972            lib_fast::SetPmapBit(pmap,5);
11973        }
11974    } else {
11975        if (QuoteCondition_AssignedQ(state)) {
11976            lib_fast::EncodeNull(buf);
11977            lib_fast::SetPmapBit(pmap,5);
11978        }
11979    }
11980    state.QuoteCondition.value = parent.QuoteCondition.value;
11981    present_qSetBitVal(state,QuoteCondition_Present_GetBit(state),QuoteCondition_PresentQ(parent));
11982    QuoteCondition_SetAssigned(state);
11983    lib_fast::InsertPmap(buf,index,pmap);
11984}
11985
11986// --- emdi12.MDIncGrp2..FastDecode
11987bool emdi12::MDIncGrp2_FastDecode(algo::memptr& from, FastState& state, emdi12::MDIncGrp2& parent) {
11988    bool ok = true;
11989    u64 pmap;
11990    ok = lib_fast::DecodePmap(from,pmap);
11991    if (!ok) {
11992        state.error << "emdi12.MDIncGrp2: bad pmap" << eol;
11993    }
11994    // MDUpdateAction type copy mandatory
11995    if (ok) {
11996        bool prs = lib_fast::GetPmapBit(pmap,0);
11997        if (prs) {
11998            ok = lib_fast::DecodeUnsigned(from,parent.MDUpdateAction.value,false);
11999            if (!ok) {
12000                state.error << "emdi12.MDIncGrp2.MDUpdateAction: bad Unsigned" << eol;
12001            }
12002        } else if (MDUpdateAction_AssignedQ(state)) {
12003            parent.MDUpdateAction.value = state.MDUpdateAction.value;
12004        } else {
12005            ok = false;
12006            state.error << "emdi12.MDIncGrp2.MDUpdateAction: copy operator: previous value unassigned" << eol;
12007        }
12008        MDUpdateAction_SetAssigned(state);
12009        state.MDUpdateAction.value = parent.MDUpdateAction.value;
12010    }
12011    // MDEntryType type copy mandatory
12012    if (ok) {
12013        bool prs = lib_fast::GetPmapBit(pmap,1);
12014        if (prs) {
12015            ok = lib_fast::DecodeUnsigned(from,parent.MDEntryType.value,false);
12016            if (!ok) {
12017                state.error << "emdi12.MDIncGrp2.MDEntryType: bad Unsigned" << eol;
12018            }
12019        } else if (MDEntryType_AssignedQ(state)) {
12020            parent.MDEntryType.value = state.MDEntryType.value;
12021        } else {
12022            ok = false;
12023            state.error << "emdi12.MDIncGrp2.MDEntryType: copy operator: previous value unassigned" << eol;
12024        }
12025        MDEntryType_SetAssigned(state);
12026        state.MDEntryType.value = parent.MDEntryType.value;
12027    }
12028    // MDBookType type constant mandatory
12029    if (ok) {
12030    }
12031    // MDSubBookType type copy mandatory
12032    if (ok) {
12033        bool prs = lib_fast::GetPmapBit(pmap,2);
12034        if (prs) {
12035            ok = lib_fast::DecodeUnsigned(from,parent.MDSubBookType.value,false);
12036            if (!ok) {
12037                state.error << "emdi12.MDIncGrp2.MDSubBookType: bad Unsigned" << eol;
12038            }
12039        } else if (MDSubBookType_AssignedQ(state)) {
12040            parent.MDSubBookType.value = state.MDSubBookType.value;
12041        } else {
12042            ok = false;
12043            state.error << "emdi12.MDIncGrp2.MDSubBookType: copy operator: previous value unassigned" << eol;
12044        }
12045        MDSubBookType_SetAssigned(state);
12046        state.MDSubBookType.value = parent.MDSubBookType.value;
12047    }
12048    // SecurityID signed copy mandatory
12049    if (ok) {
12050        bool prs = lib_fast::GetPmapBit(pmap,3);
12051        if (prs) {
12052            ok = lib_fast::DecodeSigned(from,parent.SecurityID,false);
12053            if (!ok) {
12054                state.error << "emdi12.MDIncGrp2.SecurityID: bad Signed" << eol;
12055            }
12056        } else if (SecurityID_AssignedQ(state)) {
12057            parent.SecurityID = state.SecurityID;
12058        } else {
12059            ok = false;
12060            state.error << "emdi12.MDIncGrp2.SecurityID: copy operator: previous value unassigned" << eol;
12061        }
12062        SecurityID_SetAssigned(state);
12063        state.SecurityID = parent.SecurityID;
12064    }
12065    // SecurityIDSource string constant mandatory
12066    if (ok) {
12067    }
12068    // MDEntryPx scaled delta optional
12069    if (ok) {
12070        if (!MDEntryPx_AssignedQ(state)) {
12071            MDEntryPx_SetAssigned(state);
12072            bool prs(true);
12073            present_qSetBitVal(state,MDEntryPx_Present_GetBit(state),prs);
12074            state.MDEntryPx = algo::Decimal(0,0);
12075        }
12076        bool prs = !lib_fast::DecodeNull(from);
12077        if (prs) {
12078            if (!MDEntryPx_PresentQ(state)) {
12079                state.MDEntryPx = algo::Decimal(0,0);
12080            }
12081            ok = lib_fast::DecodeDeltaScaled(from,state.MDEntryPx,parent.MDEntryPx,true);
12082            if (!ok) {
12083                state.error << "emdi12.MDIncGrp2.MDEntryPx: bad Scaled delta" << eol;
12084            }
12085            state.MDEntryPx = parent.MDEntryPx;
12086        }
12087        pmask_qSetBitVal(parent,MDEntryPx_Present_GetBit(parent),prs);
12088        present_qSetBitVal(state,MDEntryPx_Present_GetBit(state),prs);
12089    }
12090    // MDEntrySize scaled delta optional
12091    if (ok) {
12092        if (!MDEntrySize_AssignedQ(state)) {
12093            MDEntrySize_SetAssigned(state);
12094            bool prs(true);
12095            present_qSetBitVal(state,MDEntrySize_Present_GetBit(state),prs);
12096            state.MDEntrySize = algo::Decimal(0,0);
12097        }
12098        bool prs = !lib_fast::DecodeNull(from);
12099        if (prs) {
12100            if (!MDEntrySize_PresentQ(state)) {
12101                state.MDEntrySize = algo::Decimal(0,0);
12102            }
12103            ok = lib_fast::DecodeDeltaScaled(from,state.MDEntrySize,parent.MDEntrySize,true);
12104            if (!ok) {
12105                state.error << "emdi12.MDIncGrp2.MDEntrySize: bad Scaled delta" << eol;
12106            }
12107            state.MDEntrySize = parent.MDEntrySize;
12108        }
12109        pmask_qSetBitVal(parent,MDEntrySize_Present_GetBit(parent),prs);
12110        present_qSetBitVal(state,MDEntrySize_Present_GetBit(state),prs);
12111    }
12112    // MDEntryTime signed copy optional
12113    if (ok) {
12114        bool prs = lib_fast::GetPmapBit(pmap,4);
12115        if (prs) {
12116            prs = !lib_fast::DecodeNull(from);
12117            if (prs) {
12118                ok = lib_fast::DecodeSigned(from,parent.MDEntryTime,true);
12119                if (!ok) {
12120                    state.error << "emdi12.MDIncGrp2.MDEntryTime: bad Signed" << eol;
12121                }
12122            }
12123        } else if (MDEntryTime_AssignedQ(state)) {
12124            parent.MDEntryTime = state.MDEntryTime;
12125            prs = MDEntryTime_PresentQ(state);
12126        } else {
12127            prs = false;
12128        }
12129        pmask_qSetBitVal(parent,MDEntryTime_Present_GetBit(parent),prs);
12130        MDEntryTime_SetAssigned(state);
12131        present_qSetBitVal(state,MDEntryTime_Present_GetBit(state),prs);
12132        state.MDEntryTime = parent.MDEntryTime;
12133    }
12134    // QuoteCondition type copy optional
12135    if (ok) {
12136        bool prs = lib_fast::GetPmapBit(pmap,5);
12137        if (prs) {
12138            prs = !lib_fast::DecodeNull(from);
12139            if (prs) {
12140                ok = lib_fast::DecodeUnsigned(from,parent.QuoteCondition.value,true);
12141                if (!ok) {
12142                    state.error << "emdi12.MDIncGrp2.QuoteCondition: bad Unsigned" << eol;
12143                }
12144            }
12145        } else if (QuoteCondition_AssignedQ(state)) {
12146            parent.QuoteCondition.value = state.QuoteCondition.value;
12147            prs = QuoteCondition_PresentQ(state);
12148        } else {
12149            prs = false;
12150        }
12151        pmask_qSetBitVal(parent,QuoteCondition_Present_GetBit(parent),prs);
12152        QuoteCondition_SetAssigned(state);
12153        present_qSetBitVal(state,QuoteCondition_Present_GetBit(state),prs);
12154        state.QuoteCondition.value = parent.QuoteCondition.value;
12155    }
12156    return ok;
12157}
12158
12159// --- emdi12.MDIncGrp2..FixEncode
12160void emdi12::MDIncGrp2_FixEncode(cstring& buf, emdi12::MDIncGrp2& parent, char soh) {
12161    buf << "279=" << parent.MDUpdateAction << soh;
12162    buf << "269=" << parent.MDEntryType << soh;
12163    buf << "1021=" << MDBookType_Get(parent) << soh;
12164    buf << "1173=" << parent.MDSubBookType << soh;
12165    buf << "48=" << parent.SecurityID << soh;
12166    buf << "22=" << SecurityIDSource_Get(parent) << soh;
12167    if (MDEntryPx_PresentQ(parent)) {
12168        buf << "270=" << parent.MDEntryPx << soh;
12169    }
12170    if (MDEntrySize_PresentQ(parent)) {
12171        buf << "271=" << parent.MDEntrySize << soh;
12172    }
12173    if (MDEntryTime_PresentQ(parent)) {
12174        buf << "273=" << parent.MDEntryTime << soh;
12175    }
12176    if (QuoteCondition_PresentQ(parent)) {
12177        buf << "276=" << parent.QuoteCondition << soh;
12178    }
12179}
12180
12181// --- emdi12.MarketSegmentGrp3..ReadFieldMaybe
12182bool emdi12::MarketSegmentGrp3_ReadFieldMaybe(emdi12::MarketSegmentGrp3& parent, algo::strptr field, algo::strptr strval) {
12183    bool retval = true;
12184    emdi12::FieldId field_id;
12185    (void)value_SetStrptrMaybe(field_id,field);
12186    switch(field_id) {
12187        case emdi12_FieldId_MarketSegmentID: {
12188            retval = u32_ReadStrptrMaybe(parent.MarketSegmentID, strval);
12189            break;
12190        }
12191        default: break;
12192    }
12193    if (!retval) {
12194        algo_lib::AppendErrtext("attr",field);
12195    }
12196    return retval;
12197}
12198
12199// --- emdi12.MarketSegmentGrp3..ReadStrptrMaybe
12200// Read fields of emdi12::MarketSegmentGrp3 from an ascii string.
12201// The format of the string is an ssim Tuple
12202bool emdi12::MarketSegmentGrp3_ReadStrptrMaybe(emdi12::MarketSegmentGrp3 &parent, algo::strptr in_str) {
12203    bool retval = true;
12204    retval = algo::StripTypeTag(in_str, "emdi12.MarketSegmentGrp3");
12205    ind_beg(algo::Attr_curs, attr, in_str) {
12206        retval = retval && MarketSegmentGrp3_ReadFieldMaybe(parent, attr.name, attr.value);
12207    }ind_end;
12208    return retval;
12209}
12210
12211// --- emdi12.MarketSegmentGrp3..Print
12212// print string representation of ROW to string STR
12213// cfmt:emdi12.MarketSegmentGrp3.String  printfmt:Tuple
12214void emdi12::MarketSegmentGrp3_Print(emdi12::MarketSegmentGrp3& row, algo::cstring& str) {
12215    algo::tempstr temp;
12216    str << "emdi12.MarketSegmentGrp3";
12217
12218    u32_Print(row.MarketSegmentID, temp);
12219    PrintAttrSpaceReset(str,"MarketSegmentID", temp);
12220}
12221
12222// --- emdi12.MarketSegmentGrp3..FastEncode
12223void emdi12::MarketSegmentGrp3_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::MarketSegmentGrp3& parent) {
12224    int index = ary_N(buf);
12225    u64 pmap(0);
12226    // MarketSegmentID unsigned copy mandatory
12227    if (!MarketSegmentID_AssignedQ(state) || parent.MarketSegmentID != state.MarketSegmentID) {
12228        lib_fast::EncodeUnsigned(buf,parent.MarketSegmentID,false);
12229        lib_fast::SetPmapBit(pmap,0);
12230    }
12231    state.MarketSegmentID = parent.MarketSegmentID;
12232    MarketSegmentID_SetAssigned(state);
12233    lib_fast::InsertPmap(buf,index,pmap);
12234}
12235
12236// --- emdi12.MarketSegmentGrp3..FastDecode
12237bool emdi12::MarketSegmentGrp3_FastDecode(algo::memptr& from, FastState& state, emdi12::MarketSegmentGrp3& parent) {
12238    bool ok = true;
12239    u64 pmap;
12240    ok = lib_fast::DecodePmap(from,pmap);
12241    if (!ok) {
12242        state.error << "emdi12.MarketSegmentGrp3: bad pmap" << eol;
12243    }
12244    // MarketSegmentID unsigned copy mandatory
12245    if (ok) {
12246        bool prs = lib_fast::GetPmapBit(pmap,0);
12247        if (prs) {
12248            ok = lib_fast::DecodeUnsigned(from,parent.MarketSegmentID,false);
12249            if (!ok) {
12250                state.error << "emdi12.MarketSegmentGrp3.MarketSegmentID: bad Unsigned" << eol;
12251            }
12252        } else if (MarketSegmentID_AssignedQ(state)) {
12253            parent.MarketSegmentID = state.MarketSegmentID;
12254        } else {
12255            ok = false;
12256            state.error << "emdi12.MarketSegmentGrp3.MarketSegmentID: copy operator: previous value unassigned" << eol;
12257        }
12258        MarketSegmentID_SetAssigned(state);
12259        state.MarketSegmentID = parent.MarketSegmentID;
12260    }
12261    return ok;
12262}
12263
12264// --- emdi12.MarketSegmentGrp3..FixEncode
12265void emdi12::MarketSegmentGrp3_FixEncode(cstring& buf, emdi12::MarketSegmentGrp3& parent, char soh) {
12266    buf << "1300=" << parent.MarketSegmentID << soh;
12267}
12268
12269// --- emdi12.SecMassStatGrp.SecurityID.ReadStrptrMaybe
12270inline static bool emdi12::SecurityID_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) {
12271    bool retval = true;
12272    retval = i64_ReadStrptrMaybe(parent.SecurityID, in_str);
12273    return retval;
12274}
12275
12276// --- emdi12.SecMassStatGrp.SecurityStatus.ReadStrptrMaybe
12277inline static bool emdi12::SecurityStatus_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) {
12278    bool retval = true;
12279    retval = emdi12::SecurityStatus_ReadStrptrMaybe(parent.SecurityStatus, in_str);
12280    return retval;
12281}
12282
12283// --- emdi12.SecMassStatGrp.SecurityTradingStatus.ReadStrptrMaybe
12284inline static bool emdi12::SecurityTradingStatus_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) {
12285    bool retval = true;
12286    emdi12::SecurityTradingStatus SecurityTradingStatus_tmp;
12287    retval = emdi12::SecurityTradingStatus_ReadStrptrMaybe(SecurityTradingStatus_tmp, in_str);
12288    if (retval) {
12289        SecurityTradingStatus_Set(parent, SecurityTradingStatus_tmp);
12290    }
12291    return retval;
12292}
12293
12294// --- emdi12.SecMassStatGrp.MarketCondition.ReadStrptrMaybe
12295inline static bool emdi12::MarketCondition_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) {
12296    bool retval = true;
12297    retval = emdi12::MarketCondition_ReadStrptrMaybe(parent.MarketCondition, in_str);
12298    return retval;
12299}
12300
12301// --- emdi12.SecMassStatGrp.SecurityTradingEvent.ReadStrptrMaybe
12302inline static bool emdi12::SecurityTradingEvent_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) {
12303    bool retval = true;
12304    emdi12::SecurityTradingEvent SecurityTradingEvent_tmp;
12305    retval = emdi12::SecurityTradingEvent_ReadStrptrMaybe(SecurityTradingEvent_tmp, in_str);
12306    if (retval) {
12307        SecurityTradingEvent_Set(parent, SecurityTradingEvent_tmp);
12308    }
12309    return retval;
12310}
12311
12312// --- emdi12.SecMassStatGrp.SoldOutIndicator.ReadStrptrMaybe
12313inline static bool emdi12::SoldOutIndicator_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) {
12314    bool retval = true;
12315    emdi12::SoldOutIndicator SoldOutIndicator_tmp;
12316    retval = emdi12::SoldOutIndicator_ReadStrptrMaybe(SoldOutIndicator_tmp, in_str);
12317    if (retval) {
12318        SoldOutIndicator_Set(parent, SoldOutIndicator_tmp);
12319    }
12320    return retval;
12321}
12322
12323// --- emdi12.SecMassStatGrp.HighPx.ReadStrptrMaybe
12324inline static bool emdi12::HighPx_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) {
12325    bool retval = true;
12326    algo::Decimal HighPx_tmp;
12327    retval = algo::Decimal_ReadStrptrMaybe(HighPx_tmp, in_str);
12328    if (retval) {
12329        HighPx_Set(parent, HighPx_tmp);
12330    }
12331    return retval;
12332}
12333
12334// --- emdi12.SecMassStatGrp.LowPx.ReadStrptrMaybe
12335inline static bool emdi12::LowPx_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) {
12336    bool retval = true;
12337    algo::Decimal LowPx_tmp;
12338    retval = algo::Decimal_ReadStrptrMaybe(LowPx_tmp, in_str);
12339    if (retval) {
12340        LowPx_Set(parent, LowPx_tmp);
12341    }
12342    return retval;
12343}
12344
12345// --- emdi12.SecMassStatGrp.TESSecurityStatus.ReadStrptrMaybe
12346inline static bool emdi12::TESSecurityStatus_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) {
12347    bool retval = true;
12348    emdi12::SecurityStatus TESSecurityStatus_tmp;
12349    retval = emdi12::SecurityStatus_ReadStrptrMaybe(TESSecurityStatus_tmp, in_str);
12350    if (retval) {
12351        TESSecurityStatus_Set(parent, TESSecurityStatus_tmp);
12352    }
12353    return retval;
12354}
12355
12356// --- emdi12.SecMassStatGrp.pmask_bitcurs.Next
12357// proceed to next item
12358void emdi12::SecMassStatGrp_pmask_bitcurs_Next(SecMassStatGrp_pmask_bitcurs &curs) {
12359    ++curs.bit;
12360    int index = curs.bit / 32;
12361    int offset = curs.bit % 32;
12362    for (; index < curs.n_elems; ++index, offset = 0) {
12363        u64 rest = curs.elems[index] >> offset;
12364        if (rest) {
12365            offset += algo::u64_BitScanForward(rest);
12366            break;
12367        }
12368    }
12369    curs.bit = index * 32 + offset;
12370}
12371
12372// --- emdi12.SecMassStatGrp..ReadFieldMaybe
12373bool emdi12::SecMassStatGrp_ReadFieldMaybe(emdi12::SecMassStatGrp& parent, algo::strptr field, algo::strptr strval) {
12374    bool retval = true;
12375    emdi12::FieldId field_id;
12376    (void)value_SetStrptrMaybe(field_id,field);
12377    switch(field_id) {
12378        case emdi12_FieldId_pmask: {
12379            retval = false;
12380            break;
12381        }
12382        case emdi12_FieldId_SecurityID: {
12383            retval = SecurityID_ReadStrptrMaybe(parent, strval);
12384            break;
12385        }
12386        case emdi12_FieldId_SecurityIDSource: {
12387            retval = true;
12388            break;
12389        }
12390        case emdi12_FieldId_SecurityStatus: {
12391            retval = SecurityStatus_ReadStrptrMaybe(parent, strval);
12392            break;
12393        }
12394        case emdi12_FieldId_SecurityTradingStatus: {
12395            retval = SecurityTradingStatus_ReadStrptrMaybe(parent, strval);
12396            if (retval) {
12397                pmask_qSetBit(parent, 3);
12398            }
12399            break;
12400        }
12401        case emdi12_FieldId_MarketCondition: {
12402            retval = MarketCondition_ReadStrptrMaybe(parent, strval);
12403            break;
12404        }
12405        case emdi12_FieldId_SecurityTradingEvent: {
12406            retval = SecurityTradingEvent_ReadStrptrMaybe(parent, strval);
12407            if (retval) {
12408                pmask_qSetBit(parent, 2);
12409            }
12410            break;
12411        }
12412        case emdi12_FieldId_SoldOutIndicator: {
12413            retval = SoldOutIndicator_ReadStrptrMaybe(parent, strval);
12414            if (retval) {
12415                pmask_qSetBit(parent, 4);
12416            }
12417            break;
12418        }
12419        case emdi12_FieldId_HighPx: {
12420            retval = HighPx_ReadStrptrMaybe(parent, strval);
12421            if (retval) {
12422                pmask_qSetBit(parent, 0);
12423            }
12424            break;
12425        }
12426        case emdi12_FieldId_LowPx: {
12427            retval = LowPx_ReadStrptrMaybe(parent, strval);
12428            if (retval) {
12429                pmask_qSetBit(parent, 1);
12430            }
12431            break;
12432        }
12433        case emdi12_FieldId_TESSecurityStatus: {
12434            retval = TESSecurityStatus_ReadStrptrMaybe(parent, strval);
12435            if (retval) {
12436                pmask_qSetBit(parent, 5);
12437            }
12438            break;
12439        }
12440        default: break;
12441    }
12442    if (!retval) {
12443        algo_lib::AppendErrtext("attr",field);
12444    }
12445    return retval;
12446}
12447
12448// --- emdi12.SecMassStatGrp..ReadStrptrMaybe
12449// Read fields of emdi12::SecMassStatGrp from an ascii string.
12450// The format of the string is an ssim Tuple
12451bool emdi12::SecMassStatGrp_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) {
12452    bool retval = true;
12453    retval = algo::StripTypeTag(in_str, "emdi12.SecMassStatGrp");
12454    ind_beg(algo::Attr_curs, attr, in_str) {
12455        retval = retval && SecMassStatGrp_ReadFieldMaybe(parent, attr.name, attr.value);
12456    }ind_end;
12457    return retval;
12458}
12459
12460// --- emdi12.SecMassStatGrp..Init
12461// Set all fields to initial values.
12462void emdi12::SecMassStatGrp_Init(emdi12::SecMassStatGrp& SecMassStatGrp) {
12463    SecMassStatGrp.pmask = u32(0);
12464    SecMassStatGrp.SecurityID = i64(0);
12465    SecMassStatGrp.SecurityStatus = emdi12_SecurityStatusEnum(0);
12466    SecMassStatGrp.MarketCondition = emdi12_MarketConditionEnum(0);
12467    SecMassStatGrp.HighPx = algo::Decimal(algo::Decimal(0,0));
12468    SecMassStatGrp.LowPx = algo::Decimal(algo::Decimal(0,0));
12469}
12470
12471// --- emdi12.SecMassStatGrp..Print
12472// print string representation of ROW to string STR
12473// cfmt:emdi12.SecMassStatGrp.String  printfmt:Tuple
12474void emdi12::SecMassStatGrp_Print(emdi12::SecMassStatGrp& row, algo::cstring& str) {
12475    algo::tempstr temp;
12476    str << "emdi12.SecMassStatGrp";
12477
12478    i64_Print(row.SecurityID, temp);
12479    PrintAttrSpaceReset(str,"SecurityID", temp);
12480
12481    algo::strptr_Print(SecurityIDSource_Get(row), temp);
12482    PrintAttrSpaceReset(str,"SecurityIDSource", temp);
12483
12484    emdi12::SecurityStatus_Print(row.SecurityStatus, temp);
12485    PrintAttrSpaceReset(str,"SecurityStatus", temp);
12486
12487    if (SecurityTradingStatus_PresentQ(row)) {
12488        emdi12::SecurityTradingStatus_Print(row.SecurityTradingStatus, temp);
12489        PrintAttrSpaceReset(str,"SecurityTradingStatus", temp);
12490    }
12491
12492    emdi12::MarketCondition_Print(row.MarketCondition, temp);
12493    PrintAttrSpaceReset(str,"MarketCondition", temp);
12494
12495    if (SecurityTradingEvent_PresentQ(row)) {
12496        emdi12::SecurityTradingEvent_Print(row.SecurityTradingEvent, temp);
12497        PrintAttrSpaceReset(str,"SecurityTradingEvent", temp);
12498    }
12499
12500    if (SoldOutIndicator_PresentQ(row)) {
12501        emdi12::SoldOutIndicator_Print(row.SoldOutIndicator, temp);
12502        PrintAttrSpaceReset(str,"SoldOutIndicator", temp);
12503    }
12504
12505    if (HighPx_PresentQ(row)) {
12506        algo::Decimal_Print(row.HighPx, temp);
12507        PrintAttrSpaceReset(str,"HighPx", temp);
12508    }
12509
12510    if (LowPx_PresentQ(row)) {
12511        algo::Decimal_Print(row.LowPx, temp);
12512        PrintAttrSpaceReset(str,"LowPx", temp);
12513    }
12514
12515    if (TESSecurityStatus_PresentQ(row)) {
12516        emdi12::SecurityStatus_Print(row.TESSecurityStatus, temp);
12517        PrintAttrSpaceReset(str,"TESSecurityStatus", temp);
12518    }
12519}
12520
12521// --- emdi12.SecMassStatGrp..FastEncode
12522void emdi12::SecMassStatGrp_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::SecMassStatGrp& parent) {
12523    int index = ary_N(buf);
12524    u64 pmap(0);
12525    // SecurityID signed none mandatory
12526    lib_fast::EncodeSigned(buf,parent.SecurityID,false);
12527    // SecurityIDSource string constant mandatory
12528    // SecurityStatus type default mandatory
12529    if (parent.SecurityStatus.value != 0) {
12530        lib_fast::EncodeUnsigned(buf,parent.SecurityStatus.value,false);
12531        lib_fast::SetPmapBit(pmap,0);
12532    }
12533    // SecurityTradingStatus type copy optional
12534    if (SecurityTradingStatus_PresentQ(parent)) {
12535        if (!SecurityTradingStatus_AssignedQ(state) || !SecurityTradingStatus_PresentQ(state) ||  parent.SecurityTradingStatus.value != state.SecurityTradingStatus.value ) {
12536            lib_fast::EncodeUnsigned(buf,parent.SecurityTradingStatus.value,true);
12537            lib_fast::SetPmapBit(pmap,1);
12538        }
12539    } else {
12540        if (SecurityTradingStatus_AssignedQ(state)) {
12541            lib_fast::EncodeNull(buf);
12542            lib_fast::SetPmapBit(pmap,1);
12543        }
12544    }
12545    state.SecurityTradingStatus.value = parent.SecurityTradingStatus.value;
12546    present_qSetBitVal(state,SecurityTradingStatus_Present_GetBit(state),SecurityTradingStatus_PresentQ(parent));
12547    SecurityTradingStatus_SetAssigned(state);
12548    // MarketCondition type default mandatory
12549    if (parent.MarketCondition.value != 0) {
12550        lib_fast::EncodeUnsigned(buf,parent.MarketCondition.value,false);
12551        lib_fast::SetPmapBit(pmap,2);
12552    }
12553    // SecurityTradingEvent type default optional
12554    if (SecurityTradingEvent_PresentQ(parent)) {
12555        lib_fast::EncodeUnsigned(buf,parent.SecurityTradingEvent.value,true);
12556        lib_fast::SetPmapBit(pmap,3);
12557    }
12558    // SoldOutIndicator type default optional
12559    if (SoldOutIndicator_PresentQ(parent)) {
12560        lib_fast::EncodeUnsigned(buf,parent.SoldOutIndicator.value,true);
12561        lib_fast::SetPmapBit(pmap,4);
12562    }
12563    // HighPx scaled none optional
12564    if (HighPx_PresentQ(parent)) {
12565        lib_fast::EncodeScaled(buf,parent.HighPx,true);
12566    } else {
12567        lib_fast::EncodeNull(buf);
12568    }
12569    // LowPx scaled none optional
12570    if (LowPx_PresentQ(parent)) {
12571        lib_fast::EncodeScaled(buf,parent.LowPx,true);
12572    } else {
12573        lib_fast::EncodeNull(buf);
12574    }
12575    // TESSecurityStatus type copy optional
12576    if (TESSecurityStatus_PresentQ(parent)) {
12577        if (!TESSecurityStatus_AssignedQ(state) || !TESSecurityStatus_PresentQ(state) ||  parent.TESSecurityStatus.value != state.TESSecurityStatus.value ) {
12578            lib_fast::EncodeUnsigned(buf,parent.TESSecurityStatus.value,true);
12579            lib_fast::SetPmapBit(pmap,5);
12580        }
12581    } else {
12582        if (TESSecurityStatus_AssignedQ(state)) {
12583            lib_fast::EncodeNull(buf);
12584            lib_fast::SetPmapBit(pmap,5);
12585        }
12586    }
12587    state.TESSecurityStatus.value = parent.TESSecurityStatus.value;
12588    present_qSetBitVal(state,TESSecurityStatus_Present_GetBit(state),TESSecurityStatus_PresentQ(parent));
12589    TESSecurityStatus_SetAssigned(state);
12590    lib_fast::InsertPmap(buf,index,pmap);
12591}
12592
12593// --- emdi12.SecMassStatGrp..FastDecode
12594bool emdi12::SecMassStatGrp_FastDecode(algo::memptr& from, FastState& state, emdi12::SecMassStatGrp& parent) {
12595    bool ok = true;
12596    u64 pmap;
12597    ok = lib_fast::DecodePmap(from,pmap);
12598    if (!ok) {
12599        state.error << "emdi12.SecMassStatGrp: bad pmap" << eol;
12600    }
12601    // SecurityID signed none mandatory
12602    if (ok) {
12603        ok = lib_fast::DecodeSigned(from,parent.SecurityID,false);
12604        if (!ok) {
12605            state.error << "emdi12.SecMassStatGrp.SecurityID: bad Signed" << eol;
12606        }
12607    }
12608    // SecurityIDSource string constant mandatory
12609    if (ok) {
12610    }
12611    // SecurityStatus type default mandatory
12612    if (ok) {
12613        bool prs = lib_fast::GetPmapBit(pmap,0);
12614        if (prs) {
12615            ok = lib_fast::DecodeUnsigned(from,parent.SecurityStatus.value,false);
12616            if (!ok) {
12617                state.error << "emdi12.SecMassStatGrp.SecurityStatus: bad Unsigned" << eol;
12618            }
12619        } else {
12620            parent.SecurityStatus.value = 0;
12621        }
12622    }
12623    // SecurityTradingStatus type copy optional
12624    if (ok) {
12625        bool prs = lib_fast::GetPmapBit(pmap,1);
12626        if (prs) {
12627            prs = !lib_fast::DecodeNull(from);
12628            if (prs) {
12629                ok = lib_fast::DecodeUnsigned(from,parent.SecurityTradingStatus.value,true);
12630                if (!ok) {
12631                    state.error << "emdi12.SecMassStatGrp.SecurityTradingStatus: bad Unsigned" << eol;
12632                }
12633            }
12634        } else if (SecurityTradingStatus_AssignedQ(state)) {
12635            parent.SecurityTradingStatus.value = state.SecurityTradingStatus.value;
12636            prs = SecurityTradingStatus_PresentQ(state);
12637        } else {
12638            prs = false;
12639        }
12640        pmask_qSetBitVal(parent,SecurityTradingStatus_Present_GetBit(parent),prs);
12641        SecurityTradingStatus_SetAssigned(state);
12642        present_qSetBitVal(state,SecurityTradingStatus_Present_GetBit(state),prs);
12643        state.SecurityTradingStatus.value = parent.SecurityTradingStatus.value;
12644    }
12645    // MarketCondition type default mandatory
12646    if (ok) {
12647        bool prs = lib_fast::GetPmapBit(pmap,2);
12648        if (prs) {
12649            ok = lib_fast::DecodeUnsigned(from,parent.MarketCondition.value,false);
12650            if (!ok) {
12651                state.error << "emdi12.SecMassStatGrp.MarketCondition: bad Unsigned" << eol;
12652            }
12653        } else {
12654            parent.MarketCondition.value = 0;
12655        }
12656    }
12657    // SecurityTradingEvent type default optional
12658    if (ok) {
12659        bool prs = lib_fast::GetPmapBit(pmap,3);
12660        if (prs) {
12661            prs = !lib_fast::DecodeNull(from);
12662            if (prs) {
12663                ok = lib_fast::DecodeUnsigned(from,parent.SecurityTradingEvent.value,true);
12664                if (!ok) {
12665                    state.error << "emdi12.SecMassStatGrp.SecurityTradingEvent: bad Unsigned" << eol;
12666                }
12667            }
12668        } else {
12669        }
12670        pmask_qSetBitVal(parent,SecurityTradingEvent_Present_GetBit(parent),prs);
12671    }
12672    // SoldOutIndicator type default optional
12673    if (ok) {
12674        bool prs = lib_fast::GetPmapBit(pmap,4);
12675        if (prs) {
12676            prs = !lib_fast::DecodeNull(from);
12677            if (prs) {
12678                ok = lib_fast::DecodeUnsigned(from,parent.SoldOutIndicator.value,true);
12679                if (!ok) {
12680                    state.error << "emdi12.SecMassStatGrp.SoldOutIndicator: bad Unsigned" << eol;
12681                }
12682            }
12683        } else {
12684        }
12685        pmask_qSetBitVal(parent,SoldOutIndicator_Present_GetBit(parent),prs);
12686    }
12687    // HighPx scaled none optional
12688    if (ok) {
12689        bool prs = !lib_fast::DecodeNull(from);
12690        if (prs) {
12691            ok = lib_fast::DecodeScaled(from,parent.HighPx,true);
12692            if (!ok) {
12693                state.error << "emdi12.SecMassStatGrp.HighPx: bad Scaled" << eol;
12694            }
12695        }
12696        pmask_qSetBitVal(parent,HighPx_Present_GetBit(parent),prs);
12697    }
12698    // LowPx scaled none optional
12699    if (ok) {
12700        bool prs = !lib_fast::DecodeNull(from);
12701        if (prs) {
12702            ok = lib_fast::DecodeScaled(from,parent.LowPx,true);
12703            if (!ok) {
12704                state.error << "emdi12.SecMassStatGrp.LowPx: bad Scaled" << eol;
12705            }
12706        }
12707        pmask_qSetBitVal(parent,LowPx_Present_GetBit(parent),prs);
12708    }
12709    // TESSecurityStatus type copy optional
12710    if (ok) {
12711        bool prs = lib_fast::GetPmapBit(pmap,5);
12712        if (prs) {
12713            prs = !lib_fast::DecodeNull(from);
12714            if (prs) {
12715                ok = lib_fast::DecodeUnsigned(from,parent.TESSecurityStatus.value,true);
12716                if (!ok) {
12717                    state.error << "emdi12.SecMassStatGrp.TESSecurityStatus: bad Unsigned" << eol;
12718                }
12719            }
12720        } else if (TESSecurityStatus_AssignedQ(state)) {
12721            parent.TESSecurityStatus.value = state.TESSecurityStatus.value;
12722            prs = TESSecurityStatus_PresentQ(state);
12723        } else {
12724            prs = false;
12725        }
12726        pmask_qSetBitVal(parent,TESSecurityStatus_Present_GetBit(parent),prs);
12727        TESSecurityStatus_SetAssigned(state);
12728        present_qSetBitVal(state,TESSecurityStatus_Present_GetBit(state),prs);
12729        state.TESSecurityStatus.value = parent.TESSecurityStatus.value;
12730    }
12731    return ok;
12732}
12733
12734// --- emdi12.SecMassStatGrp..FixEncode
12735void emdi12::SecMassStatGrp_FixEncode(cstring& buf, emdi12::SecMassStatGrp& parent, char soh) {
12736    buf << "48=" << parent.SecurityID << soh;
12737    buf << "22=" << SecurityIDSource_Get(parent) << soh;
12738    buf << "965=" << parent.SecurityStatus << soh;
12739    if (SecurityTradingStatus_PresentQ(parent)) {
12740        buf << "326=" << parent.SecurityTradingStatus << soh;
12741    }
12742    buf << "2705=" << parent.MarketCondition << soh;
12743    if (SecurityTradingEvent_PresentQ(parent)) {
12744        buf << "1174=" << parent.SecurityTradingEvent << soh;
12745    }
12746    if (SoldOutIndicator_PresentQ(parent)) {
12747        buf << "25155=" << parent.SoldOutIndicator << soh;
12748    }
12749    if (HighPx_PresentQ(parent)) {
12750        buf << "332=" << parent.HighPx << soh;
12751    }
12752    if (LowPx_PresentQ(parent)) {
12753        buf << "333=" << parent.LowPx << soh;
12754    }
12755    if (TESSecurityStatus_PresentQ(parent)) {
12756        buf << "25045=" << parent.TESSecurityStatus << soh;
12757    }
12758}
12759
12760// --- emdi12.MassInstrumentStateChange.base.CopyOut
12761// Copy fields out of row
12762void emdi12::parent_CopyOut(emdi12::MassInstrumentStateChange &row, emdi12::TemplateHeader &out) {
12763    // length: field value is computed
12764    // id: field value is computed
12765    (void)row;//only to avoid -Wunused-parameter
12766    (void)out;//only to avoid -Wunused-parameter
12767}
12768
12769// --- emdi12.MassInstrumentStateChange.MsgSeqNum.ReadStrptrMaybe
12770inline static bool emdi12::MsgSeqNum_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) {
12771    bool retval = true;
12772    retval = u32_ReadStrptrMaybe(parent.MsgSeqNum, in_str);
12773    return retval;
12774}
12775
12776// --- emdi12.MassInstrumentStateChange.SenderCompID.ReadStrptrMaybe
12777inline static bool emdi12::SenderCompID_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) {
12778    bool retval = true;
12779    retval = u32_ReadStrptrMaybe(parent.SenderCompID, in_str);
12780    return retval;
12781}
12782
12783// --- emdi12.MassInstrumentStateChange.MarketSegmentID.ReadStrptrMaybe
12784inline static bool emdi12::MarketSegmentID_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) {
12785    bool retval = true;
12786    retval = u32_ReadStrptrMaybe(parent.MarketSegmentID, in_str);
12787    return retval;
12788}
12789
12790// --- emdi12.MassInstrumentStateChange.InstrumentScopeProductComplex.ReadStrptrMaybe
12791inline static bool emdi12::InstrumentScopeProductComplex_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) {
12792    bool retval = true;
12793    retval = emdi12::ProductComplex_ReadStrptrMaybe(parent.InstrumentScopeProductComplex, in_str);
12794    return retval;
12795}
12796
12797// --- emdi12.MassInstrumentStateChange.SecurityMassStatus.ReadStrptrMaybe
12798inline static bool emdi12::SecurityMassStatus_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) {
12799    bool retval = true;
12800    retval = emdi12::SecurityStatus_ReadStrptrMaybe(parent.SecurityMassStatus, in_str);
12801    return retval;
12802}
12803
12804// --- emdi12.MassInstrumentStateChange.SecurityMassTradingStatus.ReadStrptrMaybe
12805inline static bool emdi12::SecurityMassTradingStatus_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) {
12806    bool retval = true;
12807    emdi12::SecurityTradingStatus SecurityMassTradingStatus_tmp;
12808    retval = emdi12::SecurityTradingStatus_ReadStrptrMaybe(SecurityMassTradingStatus_tmp, in_str);
12809    if (retval) {
12810        SecurityMassTradingStatus_Set(parent, SecurityMassTradingStatus_tmp);
12811    }
12812    return retval;
12813}
12814
12815// --- emdi12.MassInstrumentStateChange.MassMarketCondition.ReadStrptrMaybe
12816inline static bool emdi12::MassMarketCondition_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) {
12817    bool retval = true;
12818    retval = emdi12::MarketCondition_ReadStrptrMaybe(parent.MassMarketCondition, in_str);
12819    return retval;
12820}
12821
12822// --- emdi12.MassInstrumentStateChange.FastMarketIndicator.ReadStrptrMaybe
12823inline static bool emdi12::FastMarketIndicator_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) {
12824    bool retval = true;
12825    retval = emdi12::FastMarketIndicator_ReadStrptrMaybe(parent.FastMarketIndicator, in_str);
12826    return retval;
12827}
12828
12829// --- emdi12.MassInstrumentStateChange.SecurityMassTradingEvent.ReadStrptrMaybe
12830inline static bool emdi12::SecurityMassTradingEvent_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) {
12831    bool retval = true;
12832    emdi12::SecurityTradingEvent SecurityMassTradingEvent_tmp;
12833    retval = emdi12::SecurityTradingEvent_ReadStrptrMaybe(SecurityMassTradingEvent_tmp, in_str);
12834    if (retval) {
12835        SecurityMassTradingEvent_Set(parent, SecurityMassTradingEvent_tmp);
12836    }
12837    return retval;
12838}
12839
12840// --- emdi12.MassInstrumentStateChange.MassSoldOutIndicator.ReadStrptrMaybe
12841inline static bool emdi12::MassSoldOutIndicator_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) {
12842    bool retval = true;
12843    emdi12::SoldOutIndicator MassSoldOutIndicator_tmp;
12844    retval = emdi12::SoldOutIndicator_ReadStrptrMaybe(MassSoldOutIndicator_tmp, in_str);
12845    if (retval) {
12846        MassSoldOutIndicator_Set(parent, MassSoldOutIndicator_tmp);
12847    }
12848    return retval;
12849}
12850
12851// --- emdi12.MassInstrumentStateChange.TransactTime.ReadStrptrMaybe
12852inline static bool emdi12::TransactTime_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) {
12853    bool retval = true;
12854    retval = i64_ReadStrptrMaybe(parent.TransactTime, in_str);
12855    return retval;
12856}
12857
12858// --- emdi12.MassInstrumentStateChange.TESSecurityMassStatus.ReadStrptrMaybe
12859inline static bool emdi12::TESSecurityMassStatus_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) {
12860    bool retval = true;
12861    emdi12::SecurityStatus TESSecurityMassStatus_tmp;
12862    retval = emdi12::SecurityStatus_ReadStrptrMaybe(TESSecurityMassStatus_tmp, in_str);
12863    if (retval) {
12864        TESSecurityMassStatus_Set(parent, TESSecurityMassStatus_tmp);
12865    }
12866    return retval;
12867}
12868
12869// --- emdi12.MassInstrumentStateChange.LastFragment.ReadStrptrMaybe
12870inline static bool emdi12::LastFragment_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) {
12871    bool retval = true;
12872    retval = emdi12::LastFragment_ReadStrptrMaybe(parent.LastFragment, in_str);
12873    return retval;
12874}
12875
12876// --- emdi12.MassInstrumentStateChange.SecMassStatGrp.Getary
12877// Access var-length portion as an aryptr. Length is determined from one of the fields.
12878algo::aryptr<emdi12::SecMassStatGrp> emdi12::SecMassStatGrp_Getary(emdi12::MassInstrumentStateChange& parent) {
12879    return algo::aryptr<emdi12::SecMassStatGrp>(SecMassStatGrp_Addr(parent), SecMassStatGrp_N(parent));
12880}
12881
12882// --- emdi12.MassInstrumentStateChange.SecMassStatGrp.Addr
12883emdi12::SecMassStatGrp* emdi12::SecMassStatGrp_Addr(emdi12::MassInstrumentStateChange& parent) {
12884    return (emdi12::SecMassStatGrp*)((u8*)&parent + sizeof(emdi12::MassInstrumentStateChange)); // address of varlen portion
12885}
12886
12887// --- emdi12.MassInstrumentStateChange.SecMassStatGrp.ReadStrptrMaybe
12888// Convert string to field. Return success value
12889bool emdi12::SecMassStatGrp_ReadStrptrMaybe(emdi12::MassInstrumentStateChange& parent, algo::strptr in_str) {
12890    bool retval = true;
12891    if (algo_lib::_db.varlenbuf) {
12892        emdi12::SecMassStatGrp *SecMassStatGrp_tmp = new(ary_AllocN(*algo_lib::_db.varlenbuf, sizeof(emdi12::SecMassStatGrp)).elems) emdi12::SecMassStatGrp;
12893        retval = emdi12::SecMassStatGrp_ReadStrptrMaybe(*SecMassStatGrp_tmp, in_str);
12894    }
12895    (void)parent;//only to avoid -Wunused-parameter
12896    return retval;
12897}
12898
12899// --- emdi12.MassInstrumentStateChange.pmask_bitcurs.Next
12900// proceed to next item
12901void emdi12::MassInstrumentStateChange_pmask_bitcurs_Next(MassInstrumentStateChange_pmask_bitcurs &curs) {
12902    ++curs.bit;
12903    int index = curs.bit / 32;
12904    int offset = curs.bit % 32;
12905    for (; index < curs.n_elems; ++index, offset = 0) {
12906        u64 rest = curs.elems[index] >> offset;
12907        if (rest) {
12908            offset += algo::u64_BitScanForward(rest);
12909            break;
12910        }
12911    }
12912    curs.bit = index * 32 + offset;
12913}
12914
12915// --- emdi12.MassInstrumentStateChange..ReadFieldMaybe
12916bool emdi12::MassInstrumentStateChange_ReadFieldMaybe(emdi12::MassInstrumentStateChange& parent, algo::strptr field, algo::strptr strval) {
12917    bool retval = true;
12918    emdi12::FieldId field_id;
12919    (void)value_SetStrptrMaybe(field_id,algo::Pathcomp(field, ".LL"));
12920    switch(field_id) {
12921        case emdi12_FieldId_base: {
12922            retval = false;
12923            break;
12924        }
12925        case emdi12_FieldId_length: {
12926            retval = false;
12927            break;
12928        }
12929        case emdi12_FieldId_id: {
12930            retval = false;
12931            break;
12932        }
12933        case emdi12_FieldId_pmask: {
12934            retval = false;
12935            break;
12936        }
12937        case emdi12_FieldId_MsgType: {
12938            retval = true;
12939            break;
12940        }
12941        case emdi12_FieldId_MsgSeqNum: {
12942            retval = MsgSeqNum_ReadStrptrMaybe(parent, strval);
12943            break;
12944        }
12945        case emdi12_FieldId_SenderCompID: {
12946            retval = SenderCompID_ReadStrptrMaybe(parent, strval);
12947            break;
12948        }
12949        case emdi12_FieldId_MarketSegmentID: {
12950            retval = MarketSegmentID_ReadStrptrMaybe(parent, strval);
12951            break;
12952        }
12953        case emdi12_FieldId_InstrumentScopeProductComplex: {
12954            retval = InstrumentScopeProductComplex_ReadStrptrMaybe(parent, strval);
12955            break;
12956        }
12957        case emdi12_FieldId_SecurityMassStatus: {
12958            retval = SecurityMassStatus_ReadStrptrMaybe(parent, strval);
12959            break;
12960        }
12961        case emdi12_FieldId_SecurityMassTradingStatus: {
12962            retval = SecurityMassTradingStatus_ReadStrptrMaybe(parent, strval);
12963            if (retval) {
12964                pmask_qSetBit(parent, 2);
12965            }
12966            break;
12967        }
12968        case emdi12_FieldId_MassMarketCondition: {
12969            retval = MassMarketCondition_ReadStrptrMaybe(parent, strval);
12970            break;
12971        }
12972        case emdi12_FieldId_FastMarketIndicator: {
12973            retval = FastMarketIndicator_ReadStrptrMaybe(parent, strval);
12974            break;
12975        }
12976        case emdi12_FieldId_SecurityMassTradingEvent: {
12977            retval = SecurityMassTradingEvent_ReadStrptrMaybe(parent, strval);
12978            if (retval) {
12979                pmask_qSetBit(parent, 1);
12980            }
12981            break;
12982        }
12983        case emdi12_FieldId_MassSoldOutIndicator: {
12984            retval = MassSoldOutIndicator_ReadStrptrMaybe(parent, strval);
12985            if (retval) {
12986                pmask_qSetBit(parent, 0);
12987            }
12988            break;
12989        }
12990        case emdi12_FieldId_TransactTime: {
12991            retval = TransactTime_ReadStrptrMaybe(parent, strval);
12992            break;
12993        }
12994        case emdi12_FieldId_TESSecurityMassStatus: {
12995            retval = TESSecurityMassStatus_ReadStrptrMaybe(parent, strval);
12996            if (retval) {
12997                pmask_qSetBit(parent, 3);
12998            }
12999            break;
13000        }
13001        case emdi12_FieldId_LastFragment: {
13002            retval = LastFragment_ReadStrptrMaybe(parent, strval);
13003            break;
13004        }
13005        case emdi12_FieldId_SecMassStatGrp: {
13006            retval = SecMassStatGrp_ReadStrptrMaybe(parent, strval);
13007            break;
13008        }
13009        default: break;
13010    }
13011    if (!retval) {
13012        algo_lib::AppendErrtext("attr",field);
13013    }
13014    return retval;
13015}
13016
13017// --- emdi12.MassInstrumentStateChange..ReadStrptrMaybe
13018// Any varlen fields are returned in algo_lib::_db.varlenbuf if set
13019// Read fields of emdi12::MassInstrumentStateChange from an ascii string.
13020// The format of the string is an ssim Tuple
13021bool emdi12::MassInstrumentStateChange_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) {
13022    bool retval = true;
13023    retval = algo::StripTypeTag(in_str, "emdi12.MassInstrumentStateChange");
13024    ind_beg(algo::Attr_curs, attr, in_str) {
13025        retval = retval && MassInstrumentStateChange_ReadFieldMaybe(parent, attr.name, attr.value);
13026    }ind_end;
13027    return retval;
13028}
13029
13030// --- emdi12.MassInstrumentStateChange..Init
13031// Set all fields to initial values.
13032void emdi12::MassInstrumentStateChange_Init(emdi12::MassInstrumentStateChange& parent) {
13033    parent.length = u32(ssizeof(parent) + (0));
13034    parent.id = u32(99);
13035    parent.pmask = u32(0);
13036    parent.MsgSeqNum = u32(0);
13037    parent.SenderCompID = u32(0);
13038    parent.MarketSegmentID = u32(0);
13039    parent.SecurityMassStatus = emdi12_SecurityStatusEnum(0);
13040    parent.MassMarketCondition = emdi12_MarketConditionEnum(0);
13041    parent.FastMarketIndicator = emdi12_FastMarketIndicatorEnum(0);
13042    parent.TransactTime = i64(0);
13043    parent.TESSecurityMassStatus = emdi12_SecurityStatusEnum(0);
13044    parent.LastFragment = emdi12_LastFragmentEnum(1);
13045}
13046
13047// --- emdi12.MassInstrumentStateChange..Print
13048// print string representation of ROW to string STR
13049// cfmt:emdi12.MassInstrumentStateChange.String  printfmt:Tuple
13050void emdi12::MassInstrumentStateChange_Print(emdi12::MassInstrumentStateChange& row, algo::cstring& str) {
13051    algo::tempstr temp;
13052    str << "emdi12.MassInstrumentStateChange";
13053
13054    algo::strptr_Print(MsgType_Get(row), temp);
13055    PrintAttrSpaceReset(str,"MsgType", temp);
13056
13057    u32_Print(row.MsgSeqNum, temp);
13058    PrintAttrSpaceReset(str,"MsgSeqNum", temp);
13059
13060    u32_Print(row.SenderCompID, temp);
13061    PrintAttrSpaceReset(str,"SenderCompID", temp);
13062
13063    u32_Print(row.MarketSegmentID, temp);
13064    PrintAttrSpaceReset(str,"MarketSegmentID", temp);
13065
13066    emdi12::ProductComplex_Print(row.InstrumentScopeProductComplex, temp);
13067    PrintAttrSpaceReset(str,"InstrumentScopeProductComplex", temp);
13068
13069    emdi12::SecurityStatus_Print(row.SecurityMassStatus, temp);
13070    PrintAttrSpaceReset(str,"SecurityMassStatus", temp);
13071
13072    if (SecurityMassTradingStatus_PresentQ(row)) {
13073        emdi12::SecurityTradingStatus_Print(row.SecurityMassTradingStatus, temp);
13074        PrintAttrSpaceReset(str,"SecurityMassTradingStatus", temp);
13075    }
13076
13077    emdi12::MarketCondition_Print(row.MassMarketCondition, temp);
13078    PrintAttrSpaceReset(str,"MassMarketCondition", temp);
13079
13080    emdi12::FastMarketIndicator_Print(row.FastMarketIndicator, temp);
13081    PrintAttrSpaceReset(str,"FastMarketIndicator", temp);
13082
13083    if (SecurityMassTradingEvent_PresentQ(row)) {
13084        emdi12::SecurityTradingEvent_Print(row.SecurityMassTradingEvent, temp);
13085        PrintAttrSpaceReset(str,"SecurityMassTradingEvent", temp);
13086    }
13087
13088    if (MassSoldOutIndicator_PresentQ(row)) {
13089        emdi12::SoldOutIndicator_Print(row.MassSoldOutIndicator, temp);
13090        PrintAttrSpaceReset(str,"MassSoldOutIndicator", temp);
13091    }
13092
13093    i64_Print(row.TransactTime, temp);
13094    PrintAttrSpaceReset(str,"TransactTime", temp);
13095
13096    if (TESSecurityMassStatus_PresentQ(row)) {
13097        emdi12::SecurityStatus_Print(row.TESSecurityMassStatus, temp);
13098        PrintAttrSpaceReset(str,"TESSecurityMassStatus", temp);
13099    }
13100
13101    emdi12::LastFragment_Print(row.LastFragment, temp);
13102    PrintAttrSpaceReset(str,"LastFragment", temp);
13103
13104    ind_beg(MassInstrumentStateChange_SecMassStatGrp_curs,SecMassStatGrp,row) {
13105        emdi12::SecMassStatGrp_Print(SecMassStatGrp, temp);
13106        tempstr name;
13107        name << "SecMassStatGrp.";
13108        name << ind_curs(SecMassStatGrp).index;
13109        PrintAttrSpaceReset(str, name, temp);
13110    }ind_end;
13111}
13112
13113// --- emdi12.MassInstrumentStateChange..FastEncode
13114void emdi12::MassInstrumentStateChange_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::MassInstrumentStateChange& parent) {
13115    int index = ary_N(buf);
13116    u64 pmap(0);
13117    if (!tid_AssignedQ(state) || parent.id != state.tid) {
13118        lib_fast::EncodeUnsigned(buf,parent.id,false);
13119        lib_fast::SetPmapBit(pmap,0);
13120    }
13121    tid_SetAssigned(state);
13122    state.tid = parent.id;
13123    // MsgType string constant mandatory
13124    // MsgSeqNum unsigned increment mandatory
13125    if (MsgSeqNum_AssignedQ(state)) {
13126        if (parent.MsgSeqNum != state.MsgSeqNum + 1) {
13127            lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
13128            lib_fast::SetPmapBit(pmap,1);
13129        }
13130    } else {
13131        lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
13132        lib_fast::SetPmapBit(pmap,1);
13133    }
13134    state.MsgSeqNum = parent.MsgSeqNum;
13135    MsgSeqNum_SetAssigned(state);
13136    // SenderCompID unsigned copy mandatory
13137    if (!SenderCompID_AssignedQ(state) || parent.SenderCompID != state.SenderCompID) {
13138        lib_fast::EncodeUnsigned(buf,parent.SenderCompID,false);
13139        lib_fast::SetPmapBit(pmap,2);
13140    }
13141    state.SenderCompID = parent.SenderCompID;
13142    SenderCompID_SetAssigned(state);
13143    // MarketSegmentID unsigned copy mandatory
13144    if (!MarketSegmentID_AssignedQ(state) || parent.MarketSegmentID != state.MarketSegmentID) {
13145        lib_fast::EncodeUnsigned(buf,parent.MarketSegmentID,false);
13146        lib_fast::SetPmapBit(pmap,3);
13147    }
13148    state.MarketSegmentID = parent.MarketSegmentID;
13149    MarketSegmentID_SetAssigned(state);
13150    // InstrumentScopeProductComplex type copy mandatory
13151    if (!InstrumentScopeProductComplex_AssignedQ(state) || parent.InstrumentScopeProductComplex.value != state.InstrumentScopeProductComplex.value) {
13152        lib_fast::EncodeUnsigned(buf,parent.InstrumentScopeProductComplex.value,false);
13153        lib_fast::SetPmapBit(pmap,4);
13154    }
13155    state.InstrumentScopeProductComplex.value = parent.InstrumentScopeProductComplex.value;
13156    InstrumentScopeProductComplex_SetAssigned(state);
13157    // SecurityMassStatus type default mandatory
13158    if (parent.SecurityMassStatus.value != 0) {
13159        lib_fast::EncodeUnsigned(buf,parent.SecurityMassStatus.value,false);
13160        lib_fast::SetPmapBit(pmap,5);
13161    }
13162    // SecurityMassTradingStatus type copy optional
13163    if (SecurityMassTradingStatus_PresentQ(parent)) {
13164        if (!SecurityMassTradingStatus_AssignedQ(state) || !SecurityMassTradingStatus_PresentQ(state) ||  parent.SecurityMassTradingStatus.value != state.SecurityMassTradingStatus.value ) {
13165            lib_fast::EncodeUnsigned(buf,parent.SecurityMassTradingStatus.value,true);
13166            lib_fast::SetPmapBit(pmap,6);
13167        }
13168    } else {
13169        if (SecurityMassTradingStatus_AssignedQ(state)) {
13170            lib_fast::EncodeNull(buf);
13171            lib_fast::SetPmapBit(pmap,6);
13172        }
13173    }
13174    state.SecurityMassTradingStatus.value = parent.SecurityMassTradingStatus.value;
13175    present_qSetBitVal(state,SecurityMassTradingStatus_Present_GetBit(state),SecurityMassTradingStatus_PresentQ(parent));
13176    SecurityMassTradingStatus_SetAssigned(state);
13177    // MassMarketCondition type default mandatory
13178    if (parent.MassMarketCondition.value != 0) {
13179        lib_fast::EncodeUnsigned(buf,parent.MassMarketCondition.value,false);
13180        lib_fast::SetPmapBit(pmap,7);
13181    }
13182    // FastMarketIndicator type default mandatory
13183    if (parent.FastMarketIndicator.value != 0) {
13184        lib_fast::EncodeUnsigned(buf,parent.FastMarketIndicator.value,false);
13185        lib_fast::SetPmapBit(pmap,8);
13186    }
13187    // SecurityMassTradingEvent type default optional
13188    if (SecurityMassTradingEvent_PresentQ(parent)) {
13189        lib_fast::EncodeUnsigned(buf,parent.SecurityMassTradingEvent.value,true);
13190        lib_fast::SetPmapBit(pmap,9);
13191    }
13192    // MassSoldOutIndicator type default optional
13193    if (MassSoldOutIndicator_PresentQ(parent)) {
13194        lib_fast::EncodeUnsigned(buf,parent.MassSoldOutIndicator.value,true);
13195        lib_fast::SetPmapBit(pmap,10);
13196    }
13197    // TransactTime signed delta mandatory
13198    if (!TransactTime_AssignedQ(state)) {
13199        TransactTime_SetAssigned(state);
13200        state.TransactTime = 0;
13201    }
13202    lib_fast::EncodeDeltaSigned(buf,state.TransactTime,parent.TransactTime,false);
13203    state.TransactTime = parent.TransactTime;
13204    // TESSecurityMassStatus type default optional
13205    if (TESSecurityMassStatus_PresentQ(parent)) {
13206        if (parent.TESSecurityMassStatus.value != 0) {
13207            lib_fast::EncodeUnsigned(buf,parent.TESSecurityMassStatus.value,true);
13208            lib_fast::SetPmapBit(pmap,11);
13209        }
13210    } else {
13211        lib_fast::EncodeNull(buf);
13212        lib_fast::SetPmapBit(pmap,11);
13213    }
13214    // SecMassStatGrp sequence none mandatory
13215    {
13216        u32 length = SecMassStatGrp_N(parent);
13217        if (length != 0) {
13218            lib_fast::EncodeUnsigned(buf,length,false);
13219            lib_fast::SetPmapBit(pmap,12);
13220        }
13221        ind_beg(MassInstrumentStateChange_SecMassStatGrp_curs,elem,parent) {
13222            SecMassStatGrp_FastEncode(buf,state,elem);
13223        }ind_end;
13224    }
13225    // LastFragment type default mandatory
13226    if (parent.LastFragment.value != 1) {
13227        lib_fast::EncodeUnsigned(buf,parent.LastFragment.value,false);
13228        lib_fast::SetPmapBit(pmap,13);
13229    }
13230    lib_fast::InsertPmap(buf,index,pmap);
13231}
13232
13233// --- emdi12.MassInstrumentStateChange..FastDecode
13234bool emdi12::MassInstrumentStateChange_FastDecode(algo::memptr& from, u64 pmap, FastState& state, emdi12::MassInstrumentStateChange& parent) {
13235    bool ok = true;
13236    // MsgType string constant mandatory
13237    if (ok) {
13238    }
13239    // MsgSeqNum unsigned increment mandatory
13240    if (ok) {
13241        bool prs = lib_fast::GetPmapBit(pmap,1);
13242        if (prs) {
13243            ok = lib_fast::DecodeUnsigned(from,parent.MsgSeqNum,false);
13244            if (!ok) {
13245                state.error << "emdi12.MassInstrumentStateChange.MsgSeqNum: bad Unsigned" << eol;
13246            }
13247        } else if (MsgSeqNum_AssignedQ(state)) {
13248            parent.MsgSeqNum = state.MsgSeqNum + 1;
13249        } else {
13250            ok = false;
13251            state.error << "emdi12.MassInstrumentStateChange.MsgSeqNum: increment operator: previous value unassigned" << eol;
13252        }
13253        MsgSeqNum_SetAssigned(state);
13254        state.MsgSeqNum = parent.MsgSeqNum;
13255    }
13256    // SenderCompID unsigned copy mandatory
13257    if (ok) {
13258        bool prs = lib_fast::GetPmapBit(pmap,2);
13259        if (prs) {
13260            ok = lib_fast::DecodeUnsigned(from,parent.SenderCompID,false);
13261            if (!ok) {
13262                state.error << "emdi12.MassInstrumentStateChange.SenderCompID: bad Unsigned" << eol;
13263            }
13264        } else if (SenderCompID_AssignedQ(state)) {
13265            parent.SenderCompID = state.SenderCompID;
13266        } else {
13267            ok = false;
13268            state.error << "emdi12.MassInstrumentStateChange.SenderCompID: copy operator: previous value unassigned" << eol;
13269        }
13270        SenderCompID_SetAssigned(state);
13271        state.SenderCompID = parent.SenderCompID;
13272    }
13273    // MarketSegmentID unsigned copy mandatory
13274    if (ok) {
13275        bool prs = lib_fast::GetPmapBit(pmap,3);
13276        if (prs) {
13277            ok = lib_fast::DecodeUnsigned(from,parent.MarketSegmentID,false);
13278            if (!ok) {
13279                state.error << "emdi12.MassInstrumentStateChange.MarketSegmentID: bad Unsigned" << eol;
13280            }
13281        } else if (MarketSegmentID_AssignedQ(state)) {
13282            parent.MarketSegmentID = state.MarketSegmentID;
13283        } else {
13284            ok = false;
13285            state.error << "emdi12.MassInstrumentStateChange.MarketSegmentID: copy operator: previous value unassigned" << eol;
13286        }
13287        MarketSegmentID_SetAssigned(state);
13288        state.MarketSegmentID = parent.MarketSegmentID;
13289    }
13290    // InstrumentScopeProductComplex type copy mandatory
13291    if (ok) {
13292        bool prs = lib_fast::GetPmapBit(pmap,4);
13293        if (prs) {
13294            ok = lib_fast::DecodeUnsigned(from,parent.InstrumentScopeProductComplex.value,false);
13295            if (!ok) {
13296                state.error << "emdi12.MassInstrumentStateChange.InstrumentScopeProductComplex: bad Unsigned" << eol;
13297            }
13298        } else if (InstrumentScopeProductComplex_AssignedQ(state)) {
13299            parent.InstrumentScopeProductComplex.value = state.InstrumentScopeProductComplex.value;
13300        } else {
13301            ok = false;
13302            state.error << "emdi12.MassInstrumentStateChange.InstrumentScopeProductComplex: copy operator: previous value unassigned" << eol;
13303        }
13304        InstrumentScopeProductComplex_SetAssigned(state);
13305        state.InstrumentScopeProductComplex.value = parent.InstrumentScopeProductComplex.value;
13306    }
13307    // SecurityMassStatus type default mandatory
13308    if (ok) {
13309        bool prs = lib_fast::GetPmapBit(pmap,5);
13310        if (prs) {
13311            ok = lib_fast::DecodeUnsigned(from,parent.SecurityMassStatus.value,false);
13312            if (!ok) {
13313                state.error << "emdi12.MassInstrumentStateChange.SecurityMassStatus: bad Unsigned" << eol;
13314            }
13315        } else {
13316            parent.SecurityMassStatus.value = 0;
13317        }
13318    }
13319    // SecurityMassTradingStatus type copy optional
13320    if (ok) {
13321        bool prs = lib_fast::GetPmapBit(pmap,6);
13322        if (prs) {
13323            prs = !lib_fast::DecodeNull(from);
13324            if (prs) {
13325                ok = lib_fast::DecodeUnsigned(from,parent.SecurityMassTradingStatus.value,true);
13326                if (!ok) {
13327                    state.error << "emdi12.MassInstrumentStateChange.SecurityMassTradingStatus: bad Unsigned" << eol;
13328                }
13329            }
13330        } else if (SecurityMassTradingStatus_AssignedQ(state)) {
13331            parent.SecurityMassTradingStatus.value = state.SecurityMassTradingStatus.value;
13332            prs = SecurityMassTradingStatus_PresentQ(state);
13333        } else {
13334            prs = false;
13335        }
13336        pmask_qSetBitVal(parent,SecurityMassTradingStatus_Present_GetBit(parent),prs);
13337        SecurityMassTradingStatus_SetAssigned(state);
13338        present_qSetBitVal(state,SecurityMassTradingStatus_Present_GetBit(state),prs);
13339        state.SecurityMassTradingStatus.value = parent.SecurityMassTradingStatus.value;
13340    }
13341    // MassMarketCondition type default mandatory
13342    if (ok) {
13343        bool prs = lib_fast::GetPmapBit(pmap,7);
13344        if (prs) {
13345            ok = lib_fast::DecodeUnsigned(from,parent.MassMarketCondition.value,false);
13346            if (!ok) {
13347                state.error << "emdi12.MassInstrumentStateChange.MassMarketCondition: bad Unsigned" << eol;
13348            }
13349        } else {
13350            parent.MassMarketCondition.value = 0;
13351        }
13352    }
13353    // FastMarketIndicator type default mandatory
13354    if (ok) {
13355        bool prs = lib_fast::GetPmapBit(pmap,8);
13356        if (prs) {
13357            ok = lib_fast::DecodeUnsigned(from,parent.FastMarketIndicator.value,false);
13358            if (!ok) {
13359                state.error << "emdi12.MassInstrumentStateChange.FastMarketIndicator: bad Unsigned" << eol;
13360            }
13361        } else {
13362            parent.FastMarketIndicator.value = 0;
13363        }
13364    }
13365    // SecurityMassTradingEvent type default optional
13366    if (ok) {
13367        bool prs = lib_fast::GetPmapBit(pmap,9);
13368        if (prs) {
13369            prs = !lib_fast::DecodeNull(from);
13370            if (prs) {
13371                ok = lib_fast::DecodeUnsigned(from,parent.SecurityMassTradingEvent.value,true);
13372                if (!ok) {
13373                    state.error << "emdi12.MassInstrumentStateChange.SecurityMassTradingEvent: bad Unsigned" << eol;
13374                }
13375            }
13376        } else {
13377        }
13378        pmask_qSetBitVal(parent,SecurityMassTradingEvent_Present_GetBit(parent),prs);
13379    }
13380    // MassSoldOutIndicator type default optional
13381    if (ok) {
13382        bool prs = lib_fast::GetPmapBit(pmap,10);
13383        if (prs) {
13384            prs = !lib_fast::DecodeNull(from);
13385            if (prs) {
13386                ok = lib_fast::DecodeUnsigned(from,parent.MassSoldOutIndicator.value,true);
13387                if (!ok) {
13388                    state.error << "emdi12.MassInstrumentStateChange.MassSoldOutIndicator: bad Unsigned" << eol;
13389                }
13390            }
13391        } else {
13392        }
13393        pmask_qSetBitVal(parent,MassSoldOutIndicator_Present_GetBit(parent),prs);
13394    }
13395    // TransactTime signed delta mandatory
13396    if (ok) {
13397        if (!TransactTime_AssignedQ(state)) {
13398            TransactTime_SetAssigned(state);
13399            state.TransactTime = 0;
13400        }
13401        ok = lib_fast::DecodeDeltaSigned(from,state.TransactTime,parent.TransactTime,false);
13402        if (!ok) {
13403            state.error << "emdi12.MassInstrumentStateChange.TransactTime: bad Signed delta" << eol;
13404        }
13405        state.TransactTime = parent.TransactTime;
13406    }
13407    // TESSecurityMassStatus type default optional
13408    if (ok) {
13409        bool prs = lib_fast::GetPmapBit(pmap,11);
13410        if (prs) {
13411            prs = !lib_fast::DecodeNull(from);
13412            if (prs) {
13413                ok = lib_fast::DecodeUnsigned(from,parent.TESSecurityMassStatus.value,true);
13414                if (!ok) {
13415                    state.error << "emdi12.MassInstrumentStateChange.TESSecurityMassStatus: bad Unsigned" << eol;
13416                }
13417            }
13418        } else {
13419            parent.TESSecurityMassStatus.value = 0;
13420            prs = true;
13421        }
13422        pmask_qSetBitVal(parent,TESSecurityMassStatus_Present_GetBit(parent),prs);
13423    }
13424    // SecMassStatGrp sequence none mandatory
13425    if (ok) {
13426        u32 length(0);
13427        bool prs = lib_fast::GetPmapBit(pmap,12);
13428        if (prs) {
13429            ok = lib_fast::DecodeUnsigned(from,length,false);
13430            if (!ok) {
13431                state.error << "emdi12.MassInstrumentStateChange.SecMassStatGrp: bad Unsigned" << eol;
13432            }
13433        } else {
13434            length = 0;
13435        }
13436        if (!ok) {
13437            state.error << "emdi12.MassInstrumentStateChange.SecMassStatGrp: bad length" << eol;
13438        }
13439        for (unsigned i=0; ok && i<length; ++i) {
13440            SecMassStatGrp &seq = *new(ary_AllocN(lib_fast::_db.varlen,sizeof seq).elems) SecMassStatGrp;
13441            ok = SecMassStatGrp_FastDecode(from,state,seq);
13442            if (!ok) {
13443                state.error << "emdi12.MassInstrumentStateChange.SecMassStatGrp: element #"<< i+1 << eol;
13444            }
13445        }
13446    }
13447    // LastFragment type default mandatory
13448    if (ok) {
13449        bool prs = lib_fast::GetPmapBit(pmap,13);
13450        if (prs) {
13451            ok = lib_fast::DecodeUnsigned(from,parent.LastFragment.value,false);
13452            if (!ok) {
13453                state.error << "emdi12.MassInstrumentStateChange.LastFragment: bad Unsigned" << eol;
13454            }
13455        } else {
13456            parent.LastFragment.value = 1;
13457        }
13458    }
13459    return ok;
13460}
13461
13462// --- emdi12.MassInstrumentStateChange..FixEncode
13463void emdi12::MassInstrumentStateChange_FixEncode(cstring& buf, emdi12::MassInstrumentStateChange& parent, char soh) {
13464    buf << "35=" << MsgType_Get(parent) << soh;
13465    buf << "34=" << parent.MsgSeqNum << soh;
13466    buf << "49=" << parent.SenderCompID << soh;
13467    buf << "1300=" << parent.MarketSegmentID << soh;
13468    buf << "1544=" << parent.InstrumentScopeProductComplex << soh;
13469    buf << "30965=" << parent.SecurityMassStatus << soh;
13470    if (SecurityMassTradingStatus_PresentQ(parent)) {
13471        buf << "1679=" << parent.SecurityMassTradingStatus << soh;
13472    }
13473    buf << "28894=" << parent.MassMarketCondition << soh;
13474    buf << "2447=" << parent.FastMarketIndicator << soh;
13475    if (SecurityMassTradingEvent_PresentQ(parent)) {
13476        buf << "1680=" << parent.SecurityMassTradingEvent << soh;
13477    }
13478    if (MassSoldOutIndicator_PresentQ(parent)) {
13479        buf << "35155=" << parent.MassSoldOutIndicator << soh;
13480    }
13481    buf << "60=" << parent.TransactTime << soh;
13482    if (TESSecurityMassStatus_PresentQ(parent)) {
13483        buf << "35045=" << parent.TESSecurityMassStatus << soh;
13484    }
13485    {
13486        u32 length = SecMassStatGrp_N(parent);
13487        if (length) {
13488            buf << "146=" << length << soh;
13489        }
13490    }
13491    ind_beg(MassInstrumentStateChange_SecMassStatGrp_curs,elem,parent) {
13492        SecMassStatGrp_FixEncode(buf,elem,soh);
13493    }ind_end;
13494    buf << "893=" << parent.LastFragment << soh;
13495}
13496
13497// --- emdi12.ProductStateChange.base.CopyOut
13498// Copy fields out of row
13499void emdi12::parent_CopyOut(emdi12::ProductStateChange &row, emdi12::TemplateHeader &out) {
13500    // length: field value is computed
13501    // id: field value is computed
13502    (void)row;//only to avoid -Wunused-parameter
13503    (void)out;//only to avoid -Wunused-parameter
13504}
13505
13506// --- emdi12.ProductStateChange.MsgSeqNum.ReadStrptrMaybe
13507inline static bool emdi12::MsgSeqNum_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) {
13508    bool retval = true;
13509    retval = u32_ReadStrptrMaybe(parent.MsgSeqNum, in_str);
13510    return retval;
13511}
13512
13513// --- emdi12.ProductStateChange.SenderCompID.ReadStrptrMaybe
13514inline static bool emdi12::SenderCompID_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) {
13515    bool retval = true;
13516    retval = u32_ReadStrptrMaybe(parent.SenderCompID, in_str);
13517    return retval;
13518}
13519
13520// --- emdi12.ProductStateChange.MarketSegmentID.ReadStrptrMaybe
13521inline static bool emdi12::MarketSegmentID_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) {
13522    bool retval = true;
13523    retval = u32_ReadStrptrMaybe(parent.MarketSegmentID, in_str);
13524    return retval;
13525}
13526
13527// --- emdi12.ProductStateChange.TradingSessionID.ReadStrptrMaybe
13528inline static bool emdi12::TradingSessionID_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) {
13529    bool retval = true;
13530    retval = emdi12::TradingSessionID_ReadStrptrMaybe(parent.TradingSessionID, in_str);
13531    return retval;
13532}
13533
13534// --- emdi12.ProductStateChange.TradingSessionSubID.ReadStrptrMaybe
13535inline static bool emdi12::TradingSessionSubID_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) {
13536    bool retval = true;
13537    retval = emdi12::TradingSessionSubID_ReadStrptrMaybe(parent.TradingSessionSubID, in_str);
13538    return retval;
13539}
13540
13541// --- emdi12.ProductStateChange.TradSesStatus.ReadStrptrMaybe
13542inline static bool emdi12::TradSesStatus_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) {
13543    bool retval = true;
13544    retval = emdi12::TradSesStatus_ReadStrptrMaybe(parent.TradSesStatus, in_str);
13545    return retval;
13546}
13547
13548// --- emdi12.ProductStateChange.MarketCondition.ReadStrptrMaybe
13549inline static bool emdi12::MarketCondition_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) {
13550    bool retval = true;
13551    emdi12::MarketCondition MarketCondition_tmp;
13552    retval = emdi12::MarketCondition_ReadStrptrMaybe(MarketCondition_tmp, in_str);
13553    if (retval) {
13554        MarketCondition_Set(parent, MarketCondition_tmp);
13555    }
13556    return retval;
13557}
13558
13559// --- emdi12.ProductStateChange.FastMarketIndicator.ReadStrptrMaybe
13560inline static bool emdi12::FastMarketIndicator_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) {
13561    bool retval = true;
13562    retval = emdi12::FastMarketIndicator_ReadStrptrMaybe(parent.FastMarketIndicator, in_str);
13563    return retval;
13564}
13565
13566// --- emdi12.ProductStateChange.TransactTime.ReadStrptrMaybe
13567inline static bool emdi12::TransactTime_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) {
13568    bool retval = true;
13569    retval = i64_ReadStrptrMaybe(parent.TransactTime, in_str);
13570    return retval;
13571}
13572
13573// --- emdi12.ProductStateChange.TESTradSesStatus.ReadStrptrMaybe
13574inline static bool emdi12::TESTradSesStatus_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) {
13575    bool retval = true;
13576    emdi12::TradSesStatus TESTradSesStatus_tmp;
13577    retval = emdi12::TradSesStatus_ReadStrptrMaybe(TESTradSesStatus_tmp, in_str);
13578    if (retval) {
13579        TESTradSesStatus_Set(parent, TESTradSesStatus_tmp);
13580    }
13581    return retval;
13582}
13583
13584// --- emdi12.ProductStateChange.pmask_bitcurs.Next
13585// proceed to next item
13586void emdi12::ProductStateChange_pmask_bitcurs_Next(ProductStateChange_pmask_bitcurs &curs) {
13587    ++curs.bit;
13588    int index = curs.bit / 32;
13589    int offset = curs.bit % 32;
13590    for (; index < curs.n_elems; ++index, offset = 0) {
13591        u64 rest = curs.elems[index] >> offset;
13592        if (rest) {
13593            offset += algo::u64_BitScanForward(rest);
13594            break;
13595        }
13596    }
13597    curs.bit = index * 32 + offset;
13598}
13599
13600// --- emdi12.ProductStateChange..ReadFieldMaybe
13601bool emdi12::ProductStateChange_ReadFieldMaybe(emdi12::ProductStateChange& parent, algo::strptr field, algo::strptr strval) {
13602    bool retval = true;
13603    emdi12::FieldId field_id;
13604    (void)value_SetStrptrMaybe(field_id,field);
13605    switch(field_id) {
13606        case emdi12_FieldId_base: {
13607            retval = false;
13608            break;
13609        }
13610        case emdi12_FieldId_length: {
13611            retval = false;
13612            break;
13613        }
13614        case emdi12_FieldId_id: {
13615            retval = false;
13616            break;
13617        }
13618        case emdi12_FieldId_pmask: {
13619            retval = false;
13620            break;
13621        }
13622        case emdi12_FieldId_MsgType: {
13623            retval = true;
13624            break;
13625        }
13626        case emdi12_FieldId_MsgSeqNum: {
13627            retval = MsgSeqNum_ReadStrptrMaybe(parent, strval);
13628            break;
13629        }
13630        case emdi12_FieldId_SenderCompID: {
13631            retval = SenderCompID_ReadStrptrMaybe(parent, strval);
13632            break;
13633        }
13634        case emdi12_FieldId_MarketSegmentID: {
13635            retval = MarketSegmentID_ReadStrptrMaybe(parent, strval);
13636            break;
13637        }
13638        case emdi12_FieldId_TradingSessionID: {
13639            retval = TradingSessionID_ReadStrptrMaybe(parent, strval);
13640            break;
13641        }
13642        case emdi12_FieldId_TradingSessionSubID: {
13643            retval = TradingSessionSubID_ReadStrptrMaybe(parent, strval);
13644            break;
13645        }
13646        case emdi12_FieldId_TradSesStatus: {
13647            retval = TradSesStatus_ReadStrptrMaybe(parent, strval);
13648            break;
13649        }
13650        case emdi12_FieldId_MarketCondition: {
13651            retval = MarketCondition_ReadStrptrMaybe(parent, strval);
13652            if (retval) {
13653                pmask_qSetBit(parent, 0);
13654            }
13655            break;
13656        }
13657        case emdi12_FieldId_FastMarketIndicator: {
13658            retval = FastMarketIndicator_ReadStrptrMaybe(parent, strval);
13659            break;
13660        }
13661        case emdi12_FieldId_TransactTime: {
13662            retval = TransactTime_ReadStrptrMaybe(parent, strval);
13663            break;
13664        }
13665        case emdi12_FieldId_TESTradSesStatus: {
13666            retval = TESTradSesStatus_ReadStrptrMaybe(parent, strval);
13667            if (retval) {
13668                pmask_qSetBit(parent, 1);
13669            }
13670            break;
13671        }
13672        default: break;
13673    }
13674    if (!retval) {
13675        algo_lib::AppendErrtext("attr",field);
13676    }
13677    return retval;
13678}
13679
13680// --- emdi12.ProductStateChange..ReadStrptrMaybe
13681// Read fields of emdi12::ProductStateChange from an ascii string.
13682// The format of the string is an ssim Tuple
13683bool emdi12::ProductStateChange_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) {
13684    bool retval = true;
13685    retval = algo::StripTypeTag(in_str, "emdi12.ProductStateChange");
13686    ind_beg(algo::Attr_curs, attr, in_str) {
13687        retval = retval && ProductStateChange_ReadFieldMaybe(parent, attr.name, attr.value);
13688    }ind_end;
13689    return retval;
13690}
13691
13692// --- emdi12.ProductStateChange..Init
13693// Set all fields to initial values.
13694void emdi12::ProductStateChange_Init(emdi12::ProductStateChange& parent) {
13695    parent.length = u32(ssizeof(parent) + (0));
13696    parent.id = u32(97);
13697    parent.pmask = u32(0);
13698    parent.MsgSeqNum = u32(0);
13699    parent.SenderCompID = u32(0);
13700    parent.MarketSegmentID = u32(0);
13701    parent.TradingSessionID = emdi12_TradingSessionIDEnum(0);
13702    parent.MarketCondition = emdi12_MarketConditionEnum(0);
13703    parent.FastMarketIndicator = emdi12_FastMarketIndicatorEnum(0);
13704    parent.TransactTime = i64(0);
13705}
13706
13707// --- emdi12.ProductStateChange..Print
13708// print string representation of ROW to string STR
13709// cfmt:emdi12.ProductStateChange.String  printfmt:Tuple
13710void emdi12::ProductStateChange_Print(emdi12::ProductStateChange& row, algo::cstring& str) {
13711    algo::tempstr temp;
13712    str << "emdi12.ProductStateChange";
13713
13714    algo::strptr_Print(MsgType_Get(row), temp);
13715    PrintAttrSpaceReset(str,"MsgType", temp);
13716
13717    u32_Print(row.MsgSeqNum, temp);
13718    PrintAttrSpaceReset(str,"MsgSeqNum", temp);
13719
13720    u32_Print(row.SenderCompID, temp);
13721    PrintAttrSpaceReset(str,"SenderCompID", temp);
13722
13723    u32_Print(row.MarketSegmentID, temp);
13724    PrintAttrSpaceReset(str,"MarketSegmentID", temp);
13725
13726    emdi12::TradingSessionID_Print(row.TradingSessionID, temp);
13727    PrintAttrSpaceReset(str,"TradingSessionID", temp);
13728
13729    emdi12::TradingSessionSubID_Print(row.TradingSessionSubID, temp);
13730    PrintAttrSpaceReset(str,"TradingSessionSubID", temp);
13731
13732    emdi12::TradSesStatus_Print(row.TradSesStatus, temp);
13733    PrintAttrSpaceReset(str,"TradSesStatus", temp);
13734
13735    if (MarketCondition_PresentQ(row)) {
13736        emdi12::MarketCondition_Print(row.MarketCondition, temp);
13737        PrintAttrSpaceReset(str,"MarketCondition", temp);
13738    }
13739
13740    emdi12::FastMarketIndicator_Print(row.FastMarketIndicator, temp);
13741    PrintAttrSpaceReset(str,"FastMarketIndicator", temp);
13742
13743    i64_Print(row.TransactTime, temp);
13744    PrintAttrSpaceReset(str,"TransactTime", temp);
13745
13746    if (TESTradSesStatus_PresentQ(row)) {
13747        emdi12::TradSesStatus_Print(row.TESTradSesStatus, temp);
13748        PrintAttrSpaceReset(str,"TESTradSesStatus", temp);
13749    }
13750}
13751
13752// --- emdi12.ProductStateChange..FastEncode
13753void emdi12::ProductStateChange_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::ProductStateChange& parent) {
13754    int index = ary_N(buf);
13755    u64 pmap(0);
13756    if (!tid_AssignedQ(state) || parent.id != state.tid) {
13757        lib_fast::EncodeUnsigned(buf,parent.id,false);
13758        lib_fast::SetPmapBit(pmap,0);
13759    }
13760    tid_SetAssigned(state);
13761    state.tid = parent.id;
13762    // MsgType string constant mandatory
13763    // MsgSeqNum unsigned increment mandatory
13764    if (MsgSeqNum_AssignedQ(state)) {
13765        if (parent.MsgSeqNum != state.MsgSeqNum + 1) {
13766            lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
13767            lib_fast::SetPmapBit(pmap,1);
13768        }
13769    } else {
13770        lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
13771        lib_fast::SetPmapBit(pmap,1);
13772    }
13773    state.MsgSeqNum = parent.MsgSeqNum;
13774    MsgSeqNum_SetAssigned(state);
13775    // SenderCompID unsigned copy mandatory
13776    if (!SenderCompID_AssignedQ(state) || parent.SenderCompID != state.SenderCompID) {
13777        lib_fast::EncodeUnsigned(buf,parent.SenderCompID,false);
13778        lib_fast::SetPmapBit(pmap,2);
13779    }
13780    state.SenderCompID = parent.SenderCompID;
13781    SenderCompID_SetAssigned(state);
13782    // MarketSegmentID unsigned copy mandatory
13783    if (!MarketSegmentID_AssignedQ(state) || parent.MarketSegmentID != state.MarketSegmentID) {
13784        lib_fast::EncodeUnsigned(buf,parent.MarketSegmentID,false);
13785        lib_fast::SetPmapBit(pmap,3);
13786    }
13787    state.MarketSegmentID = parent.MarketSegmentID;
13788    MarketSegmentID_SetAssigned(state);
13789    // TradingSessionID type default mandatory
13790    if (parent.TradingSessionID.value != 0) {
13791        lib_fast::EncodeUnsigned(buf,parent.TradingSessionID.value,false);
13792        lib_fast::SetPmapBit(pmap,4);
13793    }
13794    // TradingSessionSubID type none mandatory
13795    lib_fast::EncodeUnsigned(buf,parent.TradingSessionSubID.value,false);
13796    // TradSesStatus type none mandatory
13797    lib_fast::EncodeUnsigned(buf,parent.TradSesStatus.value,false);
13798    // MarketCondition type default optional
13799    if (MarketCondition_PresentQ(parent)) {
13800        if (parent.MarketCondition.value != 0) {
13801            lib_fast::EncodeUnsigned(buf,parent.MarketCondition.value,true);
13802            lib_fast::SetPmapBit(pmap,5);
13803        }
13804    } else {
13805        lib_fast::EncodeNull(buf);
13806        lib_fast::SetPmapBit(pmap,5);
13807    }
13808    // FastMarketIndicator type default mandatory
13809    if (parent.FastMarketIndicator.value != 0) {
13810        lib_fast::EncodeUnsigned(buf,parent.FastMarketIndicator.value,false);
13811        lib_fast::SetPmapBit(pmap,6);
13812    }
13813    // TransactTime signed none mandatory
13814    lib_fast::EncodeSigned(buf,parent.TransactTime,false);
13815    // TESTradSesStatus type none optional
13816    if (TESTradSesStatus_PresentQ(parent)) {
13817        lib_fast::EncodeUnsigned(buf,parent.TESTradSesStatus.value,true);
13818    } else {
13819        lib_fast::EncodeNull(buf);
13820    }
13821    lib_fast::InsertPmap(buf,index,pmap);
13822}
13823
13824// --- emdi12.ProductStateChange..FastDecode
13825bool emdi12::ProductStateChange_FastDecode(algo::memptr& from, u64 pmap, FastState& state, emdi12::ProductStateChange& parent) {
13826    bool ok = true;
13827    // MsgType string constant mandatory
13828    if (ok) {
13829    }
13830    // MsgSeqNum unsigned increment mandatory
13831    if (ok) {
13832        bool prs = lib_fast::GetPmapBit(pmap,1);
13833        if (prs) {
13834            ok = lib_fast::DecodeUnsigned(from,parent.MsgSeqNum,false);
13835            if (!ok) {
13836                state.error << "emdi12.ProductStateChange.MsgSeqNum: bad Unsigned" << eol;
13837            }
13838        } else if (MsgSeqNum_AssignedQ(state)) {
13839            parent.MsgSeqNum = state.MsgSeqNum + 1;
13840        } else {
13841            ok = false;
13842            state.error << "emdi12.ProductStateChange.MsgSeqNum: increment operator: previous value unassigned" << eol;
13843        }
13844        MsgSeqNum_SetAssigned(state);
13845        state.MsgSeqNum = parent.MsgSeqNum;
13846    }
13847    // SenderCompID unsigned copy mandatory
13848    if (ok) {
13849        bool prs = lib_fast::GetPmapBit(pmap,2);
13850        if (prs) {
13851            ok = lib_fast::DecodeUnsigned(from,parent.SenderCompID,false);
13852            if (!ok) {
13853                state.error << "emdi12.ProductStateChange.SenderCompID: bad Unsigned" << eol;
13854            }
13855        } else if (SenderCompID_AssignedQ(state)) {
13856            parent.SenderCompID = state.SenderCompID;
13857        } else {
13858            ok = false;
13859            state.error << "emdi12.ProductStateChange.SenderCompID: copy operator: previous value unassigned" << eol;
13860        }
13861        SenderCompID_SetAssigned(state);
13862        state.SenderCompID = parent.SenderCompID;
13863    }
13864    // MarketSegmentID unsigned copy mandatory
13865    if (ok) {
13866        bool prs = lib_fast::GetPmapBit(pmap,3);
13867        if (prs) {
13868            ok = lib_fast::DecodeUnsigned(from,parent.MarketSegmentID,false);
13869            if (!ok) {
13870                state.error << "emdi12.ProductStateChange.MarketSegmentID: bad Unsigned" << eol;
13871            }
13872        } else if (MarketSegmentID_AssignedQ(state)) {
13873            parent.MarketSegmentID = state.MarketSegmentID;
13874        } else {
13875            ok = false;
13876            state.error << "emdi12.ProductStateChange.MarketSegmentID: copy operator: previous value unassigned" << eol;
13877        }
13878        MarketSegmentID_SetAssigned(state);
13879        state.MarketSegmentID = parent.MarketSegmentID;
13880    }
13881    // TradingSessionID type default mandatory
13882    if (ok) {
13883        bool prs = lib_fast::GetPmapBit(pmap,4);
13884        if (prs) {
13885            ok = lib_fast::DecodeUnsigned(from,parent.TradingSessionID.value,false);
13886            if (!ok) {
13887                state.error << "emdi12.ProductStateChange.TradingSessionID: bad Unsigned" << eol;
13888            }
13889        } else {
13890            parent.TradingSessionID.value = 0;
13891        }
13892    }
13893    // TradingSessionSubID type none mandatory
13894    if (ok) {
13895        ok = lib_fast::DecodeUnsigned(from,parent.TradingSessionSubID.value,false);
13896        if (!ok) {
13897            state.error << "emdi12.ProductStateChange.TradingSessionSubID: bad Unsigned" << eol;
13898        }
13899    }
13900    // TradSesStatus type none mandatory
13901    if (ok) {
13902        ok = lib_fast::DecodeUnsigned(from,parent.TradSesStatus.value,false);
13903        if (!ok) {
13904            state.error << "emdi12.ProductStateChange.TradSesStatus: bad Unsigned" << eol;
13905        }
13906    }
13907    // MarketCondition type default optional
13908    if (ok) {
13909        bool prs = lib_fast::GetPmapBit(pmap,5);
13910        if (prs) {
13911            prs = !lib_fast::DecodeNull(from);
13912            if (prs) {
13913                ok = lib_fast::DecodeUnsigned(from,parent.MarketCondition.value,true);
13914                if (!ok) {
13915                    state.error << "emdi12.ProductStateChange.MarketCondition: bad Unsigned" << eol;
13916                }
13917            }
13918        } else {
13919            parent.MarketCondition.value = 0;
13920            prs = true;
13921        }
13922        pmask_qSetBitVal(parent,MarketCondition_Present_GetBit(parent),prs);
13923    }
13924    // FastMarketIndicator type default mandatory
13925    if (ok) {
13926        bool prs = lib_fast::GetPmapBit(pmap,6);
13927        if (prs) {
13928            ok = lib_fast::DecodeUnsigned(from,parent.FastMarketIndicator.value,false);
13929            if (!ok) {
13930                state.error << "emdi12.ProductStateChange.FastMarketIndicator: bad Unsigned" << eol;
13931            }
13932        } else {
13933            parent.FastMarketIndicator.value = 0;
13934        }
13935    }
13936    // TransactTime signed none mandatory
13937    if (ok) {
13938        ok = lib_fast::DecodeSigned(from,parent.TransactTime,false);
13939        if (!ok) {
13940            state.error << "emdi12.ProductStateChange.TransactTime: bad Signed" << eol;
13941        }
13942    }
13943    // TESTradSesStatus type none optional
13944    if (ok) {
13945        bool prs = !lib_fast::DecodeNull(from);
13946        if (prs) {
13947            ok = lib_fast::DecodeUnsigned(from,parent.TESTradSesStatus.value,true);
13948            if (!ok) {
13949                state.error << "emdi12.ProductStateChange.TESTradSesStatus: bad Unsigned" << eol;
13950            }
13951        }
13952        pmask_qSetBitVal(parent,TESTradSesStatus_Present_GetBit(parent),prs);
13953    }
13954    return ok;
13955}
13956
13957// --- emdi12.ProductStateChange..FixEncode
13958void emdi12::ProductStateChange_FixEncode(cstring& buf, emdi12::ProductStateChange& parent, char soh) {
13959    buf << "35=" << MsgType_Get(parent) << soh;
13960    buf << "34=" << parent.MsgSeqNum << soh;
13961    buf << "49=" << parent.SenderCompID << soh;
13962    buf << "1300=" << parent.MarketSegmentID << soh;
13963    buf << "336=" << parent.TradingSessionID << soh;
13964    buf << "625=" << parent.TradingSessionSubID << soh;
13965    buf << "340=" << parent.TradSesStatus << soh;
13966    if (MarketCondition_PresentQ(parent)) {
13967        buf << "2705=" << parent.MarketCondition << soh;
13968    }
13969    buf << "2447=" << parent.FastMarketIndicator << soh;
13970    buf << "60=" << parent.TransactTime << soh;
13971    if (TESTradSesStatus_PresentQ(parent)) {
13972        buf << "25044=" << parent.TESTradSesStatus << soh;
13973    }
13974}
13975
13976// --- emdi12.QuotReqGrp.SecurityID.ReadStrptrMaybe
13977inline static bool emdi12::SecurityID_ReadStrptrMaybe(emdi12::QuotReqGrp &parent, algo::strptr in_str) {
13978    bool retval = true;
13979    retval = i64_ReadStrptrMaybe(parent.SecurityID, in_str);
13980    return retval;
13981}
13982
13983// --- emdi12.QuotReqGrp.Side.ReadStrptrMaybe
13984inline static bool emdi12::Side_ReadStrptrMaybe(emdi12::QuotReqGrp &parent, algo::strptr in_str) {
13985    bool retval = true;
13986    emdi12::Side Side_tmp;
13987    retval = emdi12::Side_ReadStrptrMaybe(Side_tmp, in_str);
13988    if (retval) {
13989        Side_Set(parent, Side_tmp);
13990    }
13991    return retval;
13992}
13993
13994// --- emdi12.QuotReqGrp.OrderQty.ReadStrptrMaybe
13995inline static bool emdi12::OrderQty_ReadStrptrMaybe(emdi12::QuotReqGrp &parent, algo::strptr in_str) {
13996    bool retval = true;
13997    algo::Decimal OrderQty_tmp;
13998    retval = algo::Decimal_ReadStrptrMaybe(OrderQty_tmp, in_str);
13999    if (retval) {
14000        OrderQty_Set(parent, OrderQty_tmp);
14001    }
14002    return retval;
14003}
14004
14005// --- emdi12.QuotReqGrp.TransactTime.ReadStrptrMaybe
14006inline static bool emdi12::TransactTime_ReadStrptrMaybe(emdi12::QuotReqGrp &parent, algo::strptr in_str) {
14007    bool retval = true;
14008    retval = i64_ReadStrptrMaybe(parent.TransactTime, in_str);
14009    return retval;
14010}
14011
14012// --- emdi12.QuotReqGrp.pmask_bitcurs.Next
14013// proceed to next item
14014void emdi12::QuotReqGrp_pmask_bitcurs_Next(QuotReqGrp_pmask_bitcurs &curs) {
14015    ++curs.bit;
14016    int index = curs.bit / 32;
14017    int offset = curs.bit % 32;
14018    for (; index < curs.n_elems; ++index, offset = 0) {
14019        u64 rest = curs.elems[index] >> offset;
14020        if (rest) {
14021            offset += algo::u64_BitScanForward(rest);
14022            break;
14023        }
14024    }
14025    curs.bit = index * 32 + offset;
14026}
14027
14028// --- emdi12.QuotReqGrp..ReadFieldMaybe
14029bool emdi12::QuotReqGrp_ReadFieldMaybe(emdi12::QuotReqGrp& parent, algo::strptr field, algo::strptr strval) {
14030    bool retval = true;
14031    emdi12::FieldId field_id;
14032    (void)value_SetStrptrMaybe(field_id,field);
14033    switch(field_id) {
14034        case emdi12_FieldId_pmask: {
14035            retval = false;
14036            break;
14037        }
14038        case emdi12_FieldId_SecurityID: {
14039            retval = SecurityID_ReadStrptrMaybe(parent, strval);
14040            break;
14041        }
14042        case emdi12_FieldId_SecurityIDSource: {
14043            retval = true;
14044            break;
14045        }
14046        case emdi12_FieldId_Side: {
14047            retval = Side_ReadStrptrMaybe(parent, strval);
14048            if (retval) {
14049                pmask_qSetBit(parent, 1);
14050            }
14051            break;
14052        }
14053        case emdi12_FieldId_OrderQty: {
14054            retval = OrderQty_ReadStrptrMaybe(parent, strval);
14055            if (retval) {
14056                pmask_qSetBit(parent, 0);
14057            }
14058            break;
14059        }
14060        case emdi12_FieldId_TransactTime: {
14061            retval = TransactTime_ReadStrptrMaybe(parent, strval);
14062            break;
14063        }
14064        default: break;
14065    }
14066    if (!retval) {
14067        algo_lib::AppendErrtext("attr",field);
14068    }
14069    return retval;
14070}
14071
14072// --- emdi12.QuotReqGrp..ReadStrptrMaybe
14073// Read fields of emdi12::QuotReqGrp from an ascii string.
14074// The format of the string is an ssim Tuple
14075bool emdi12::QuotReqGrp_ReadStrptrMaybe(emdi12::QuotReqGrp &parent, algo::strptr in_str) {
14076    bool retval = true;
14077    retval = algo::StripTypeTag(in_str, "emdi12.QuotReqGrp");
14078    ind_beg(algo::Attr_curs, attr, in_str) {
14079        retval = retval && QuotReqGrp_ReadFieldMaybe(parent, attr.name, attr.value);
14080    }ind_end;
14081    return retval;
14082}
14083
14084// --- emdi12.QuotReqGrp..Print
14085// print string representation of ROW to string STR
14086// cfmt:emdi12.QuotReqGrp.String  printfmt:Tuple
14087void emdi12::QuotReqGrp_Print(emdi12::QuotReqGrp& row, algo::cstring& str) {
14088    algo::tempstr temp;
14089    str << "emdi12.QuotReqGrp";
14090
14091    i64_Print(row.SecurityID, temp);
14092    PrintAttrSpaceReset(str,"SecurityID", temp);
14093
14094    algo::strptr_Print(SecurityIDSource_Get(row), temp);
14095    PrintAttrSpaceReset(str,"SecurityIDSource", temp);
14096
14097    if (Side_PresentQ(row)) {
14098        emdi12::Side_Print(row.Side, temp);
14099        PrintAttrSpaceReset(str,"Side", temp);
14100    }
14101
14102    if (OrderQty_PresentQ(row)) {
14103        algo::Decimal_Print(row.OrderQty, temp);
14104        PrintAttrSpaceReset(str,"OrderQty", temp);
14105    }
14106
14107    i64_Print(row.TransactTime, temp);
14108    PrintAttrSpaceReset(str,"TransactTime", temp);
14109}
14110
14111// --- emdi12.QuotReqGrp..FastEncode
14112void emdi12::QuotReqGrp_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::QuotReqGrp& parent) {
14113    int index = ary_N(buf);
14114    u64 pmap(0);
14115    // SecurityID signed copy mandatory
14116    if (!SecurityID_AssignedQ(state) || parent.SecurityID != state.SecurityID) {
14117        lib_fast::EncodeSigned(buf,parent.SecurityID,false);
14118        lib_fast::SetPmapBit(pmap,0);
14119    }
14120    state.SecurityID = parent.SecurityID;
14121    SecurityID_SetAssigned(state);
14122    // SecurityIDSource string constant mandatory
14123    // Side type copy optional
14124    if (Side_PresentQ(parent)) {
14125        if (!Side_AssignedQ(state) || !Side_PresentQ(state) ||  parent.Side.value != state.Side.value ) {
14126            lib_fast::EncodeUnsigned(buf,parent.Side.value,true);
14127            lib_fast::SetPmapBit(pmap,1);
14128        }
14129    } else {
14130        if (Side_AssignedQ(state)) {
14131            lib_fast::EncodeNull(buf);
14132            lib_fast::SetPmapBit(pmap,1);
14133        }
14134    }
14135    state.Side.value = parent.Side.value;
14136    present_qSetBitVal(state,Side_Present_GetBit(state),Side_PresentQ(parent));
14137    Side_SetAssigned(state);
14138    // OrderQty scaled delta optional
14139    if (!OrderQty_AssignedQ(state)) {
14140        OrderQty_SetAssigned(state);
14141        present_qSetBitVal(state,OrderQty_Present_GetBit(state),OrderQty_PresentQ(parent));
14142        state.OrderQty = algo::Decimal(0,0);
14143    }
14144    if (OrderQty_PresentQ(parent)) {
14145        if (!OrderQty_PresentQ(state)) {
14146            state.OrderQty = algo::Decimal(0,0);
14147        }
14148        lib_fast::EncodeDeltaScaled(buf,state.OrderQty,parent.OrderQty,true);
14149    } else {
14150        lib_fast::EncodeNull(buf);
14151    }
14152    state.OrderQty = parent.OrderQty;
14153    present_qSetBitVal(state,OrderQty_Present_GetBit(state),OrderQty_PresentQ(parent));
14154    // TransactTime signed copy mandatory
14155    if (!TransactTime_AssignedQ(state) || parent.TransactTime != state.TransactTime) {
14156        lib_fast::EncodeSigned(buf,parent.TransactTime,false);
14157        lib_fast::SetPmapBit(pmap,2);
14158    }
14159    state.TransactTime = parent.TransactTime;
14160    TransactTime_SetAssigned(state);
14161    lib_fast::InsertPmap(buf,index,pmap);
14162}
14163
14164// --- emdi12.QuotReqGrp..FastDecode
14165bool emdi12::QuotReqGrp_FastDecode(algo::memptr& from, FastState& state, emdi12::QuotReqGrp& parent) {
14166    bool ok = true;
14167    u64 pmap;
14168    ok = lib_fast::DecodePmap(from,pmap);
14169    if (!ok) {
14170        state.error << "emdi12.QuotReqGrp: bad pmap" << eol;
14171    }
14172    // SecurityID signed copy mandatory
14173    if (ok) {
14174        bool prs = lib_fast::GetPmapBit(pmap,0);
14175        if (prs) {
14176            ok = lib_fast::DecodeSigned(from,parent.SecurityID,false);
14177            if (!ok) {
14178                state.error << "emdi12.QuotReqGrp.SecurityID: bad Signed" << eol;
14179            }
14180        } else if (SecurityID_AssignedQ(state)) {
14181            parent.SecurityID = state.SecurityID;
14182        } else {
14183            ok = false;
14184            state.error << "emdi12.QuotReqGrp.SecurityID: copy operator: previous value unassigned" << eol;
14185        }
14186        SecurityID_SetAssigned(state);
14187        state.SecurityID = parent.SecurityID;
14188    }
14189    // SecurityIDSource string constant mandatory
14190    if (ok) {
14191    }
14192    // Side type copy optional
14193    if (ok) {
14194        bool prs = lib_fast::GetPmapBit(pmap,1);
14195        if (prs) {
14196            prs = !lib_fast::DecodeNull(from);
14197            if (prs) {
14198                ok = lib_fast::DecodeUnsigned(from,parent.Side.value,true);
14199                if (!ok) {
14200                    state.error << "emdi12.QuotReqGrp.Side: bad Unsigned" << eol;
14201                }
14202            }
14203        } else if (Side_AssignedQ(state)) {
14204            parent.Side.value = state.Side.value;
14205            prs = Side_PresentQ(state);
14206        } else {
14207            prs = false;
14208        }
14209        pmask_qSetBitVal(parent,Side_Present_GetBit(parent),prs);
14210        Side_SetAssigned(state);
14211        present_qSetBitVal(state,Side_Present_GetBit(state),prs);
14212        state.Side.value = parent.Side.value;
14213    }
14214    // OrderQty scaled delta optional
14215    if (ok) {
14216        if (!OrderQty_AssignedQ(state)) {
14217            OrderQty_SetAssigned(state);
14218            bool prs(true);
14219            present_qSetBitVal(state,OrderQty_Present_GetBit(state),prs);
14220            state.OrderQty = algo::Decimal(0,0);
14221        }
14222        bool prs = !lib_fast::DecodeNull(from);
14223        if (prs) {
14224            if (!OrderQty_PresentQ(state)) {
14225                state.OrderQty = algo::Decimal(0,0);
14226            }
14227            ok = lib_fast::DecodeDeltaScaled(from,state.OrderQty,parent.OrderQty,true);
14228            if (!ok) {
14229                state.error << "emdi12.QuotReqGrp.OrderQty: bad Scaled delta" << eol;
14230            }
14231            state.OrderQty = parent.OrderQty;
14232        }
14233        pmask_qSetBitVal(parent,OrderQty_Present_GetBit(parent),prs);
14234        present_qSetBitVal(state,OrderQty_Present_GetBit(state),prs);
14235    }
14236    // TransactTime signed copy mandatory
14237    if (ok) {
14238        bool prs = lib_fast::GetPmapBit(pmap,2);
14239        if (prs) {
14240            ok = lib_fast::DecodeSigned(from,parent.TransactTime,false);
14241            if (!ok) {
14242                state.error << "emdi12.QuotReqGrp.TransactTime: bad Signed" << eol;
14243            }
14244        } else if (TransactTime_AssignedQ(state)) {
14245            parent.TransactTime = state.TransactTime;
14246        } else {
14247            ok = false;
14248            state.error << "emdi12.QuotReqGrp.TransactTime: copy operator: previous value unassigned" << eol;
14249        }
14250        TransactTime_SetAssigned(state);
14251        state.TransactTime = parent.TransactTime;
14252    }
14253    return ok;
14254}
14255
14256// --- emdi12.QuotReqGrp..FixEncode
14257void emdi12::QuotReqGrp_FixEncode(cstring& buf, emdi12::QuotReqGrp& parent, char soh) {
14258    buf << "48=" << parent.SecurityID << soh;
14259    buf << "22=" << SecurityIDSource_Get(parent) << soh;
14260    if (Side_PresentQ(parent)) {
14261        buf << "54=" << parent.Side << soh;
14262    }
14263    if (OrderQty_PresentQ(parent)) {
14264        buf << "38=" << parent.OrderQty << soh;
14265    }
14266    buf << "60=" << parent.TransactTime << soh;
14267}
14268
14269// --- emdi12.QuoteRequest.base.CopyOut
14270// Copy fields out of row
14271void emdi12::parent_CopyOut(emdi12::QuoteRequest &row, emdi12::TemplateHeader &out) {
14272    // length: field value is computed
14273    // id: field value is computed
14274    (void)row;//only to avoid -Wunused-parameter
14275    (void)out;//only to avoid -Wunused-parameter
14276}
14277
14278// --- emdi12.QuoteRequest..ReadFieldMaybe
14279bool emdi12::QuoteRequest_ReadFieldMaybe(emdi12::QuoteRequest& parent, algo::strptr field, algo::strptr strval) {
14280    bool retval = true;
14281    emdi12::FieldId field_id;
14282    (void)value_SetStrptrMaybe(field_id,field);
14283    switch(field_id) {
14284        case emdi12_FieldId_base: {
14285            retval = false;
14286            break;
14287        }
14288        case emdi12_FieldId_length: {
14289            retval = false;
14290            break;
14291        }
14292        case emdi12_FieldId_id: {
14293            retval = false;
14294            break;
14295        }
14296        case emdi12_FieldId_MsgType: {
14297            retval = true;
14298            break;
14299        }
14300        case emdi12_FieldId_MsgSeqNum: {
14301            retval = u32_ReadStrptrMaybe(parent.MsgSeqNum, strval);
14302            break;
14303        }
14304        case emdi12_FieldId_SenderCompID: {
14305            retval = u32_ReadStrptrMaybe(parent.SenderCompID, strval);
14306            break;
14307        }
14308        case emdi12_FieldId_MarketSegmentID: {
14309            retval = u32_ReadStrptrMaybe(parent.MarketSegmentID, strval);
14310            break;
14311        }
14312        case emdi12_FieldId_QuotReqGrp: {
14313            retval = emdi12::QuotReqGrp_ReadStrptrMaybe(parent.QuotReqGrp, strval);
14314            break;
14315        }
14316        default: break;
14317    }
14318    if (!retval) {
14319        algo_lib::AppendErrtext("attr",field);
14320    }
14321    return retval;
14322}
14323
14324// --- emdi12.QuoteRequest..ReadStrptrMaybe
14325// Read fields of emdi12::QuoteRequest from an ascii string.
14326// The format of the string is an ssim Tuple
14327bool emdi12::QuoteRequest_ReadStrptrMaybe(emdi12::QuoteRequest &parent, algo::strptr in_str) {
14328    bool retval = true;
14329    retval = algo::StripTypeTag(in_str, "emdi12.QuoteRequest");
14330    ind_beg(algo::Attr_curs, attr, in_str) {
14331        retval = retval && QuoteRequest_ReadFieldMaybe(parent, attr.name, attr.value);
14332    }ind_end;
14333    return retval;
14334}
14335
14336// --- emdi12.QuoteRequest..Print
14337// print string representation of ROW to string STR
14338// cfmt:emdi12.QuoteRequest.String  printfmt:Tuple
14339void emdi12::QuoteRequest_Print(emdi12::QuoteRequest& row, algo::cstring& str) {
14340    algo::tempstr temp;
14341    str << "emdi12.QuoteRequest";
14342
14343    algo::strptr_Print(MsgType_Get(row), temp);
14344    PrintAttrSpaceReset(str,"MsgType", temp);
14345
14346    u32_Print(row.MsgSeqNum, temp);
14347    PrintAttrSpaceReset(str,"MsgSeqNum", temp);
14348
14349    u32_Print(row.SenderCompID, temp);
14350    PrintAttrSpaceReset(str,"SenderCompID", temp);
14351
14352    u32_Print(row.MarketSegmentID, temp);
14353    PrintAttrSpaceReset(str,"MarketSegmentID", temp);
14354
14355    emdi12::QuotReqGrp_Print(row.QuotReqGrp, temp);
14356    PrintAttrSpaceReset(str,"QuotReqGrp", temp);
14357}
14358
14359// --- emdi12.QuoteRequest..FastEncode
14360void emdi12::QuoteRequest_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::QuoteRequest& parent) {
14361    int index = ary_N(buf);
14362    u64 pmap(0);
14363    if (!tid_AssignedQ(state) || parent.id != state.tid) {
14364        lib_fast::EncodeUnsigned(buf,parent.id,false);
14365        lib_fast::SetPmapBit(pmap,0);
14366    }
14367    tid_SetAssigned(state);
14368    state.tid = parent.id;
14369    // MsgType string constant mandatory
14370    // MsgSeqNum unsigned increment mandatory
14371    if (MsgSeqNum_AssignedQ(state)) {
14372        if (parent.MsgSeqNum != state.MsgSeqNum + 1) {
14373            lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
14374            lib_fast::SetPmapBit(pmap,1);
14375        }
14376    } else {
14377        lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
14378        lib_fast::SetPmapBit(pmap,1);
14379    }
14380    state.MsgSeqNum = parent.MsgSeqNum;
14381    MsgSeqNum_SetAssigned(state);
14382    // SenderCompID unsigned copy mandatory
14383    if (!SenderCompID_AssignedQ(state) || parent.SenderCompID != state.SenderCompID) {
14384        lib_fast::EncodeUnsigned(buf,parent.SenderCompID,false);
14385        lib_fast::SetPmapBit(pmap,2);
14386    }
14387    state.SenderCompID = parent.SenderCompID;
14388    SenderCompID_SetAssigned(state);
14389    // MarketSegmentID unsigned copy mandatory
14390    if (!MarketSegmentID_AssignedQ(state) || parent.MarketSegmentID != state.MarketSegmentID) {
14391        lib_fast::EncodeUnsigned(buf,parent.MarketSegmentID,false);
14392        lib_fast::SetPmapBit(pmap,3);
14393    }
14394    state.MarketSegmentID = parent.MarketSegmentID;
14395    MarketSegmentID_SetAssigned(state);
14396    // QuotReqGrp sequence none mandatory
14397    QuotReqGrp_FastEncode(buf,state,parent.QuotReqGrp);
14398    lib_fast::InsertPmap(buf,index,pmap);
14399}
14400
14401// --- emdi12.QuoteRequest..FastDecode
14402bool emdi12::QuoteRequest_FastDecode(algo::memptr& from, u64 pmap, FastState& state, emdi12::QuoteRequest& parent) {
14403    bool ok = true;
14404    // MsgType string constant mandatory
14405    if (ok) {
14406    }
14407    // MsgSeqNum unsigned increment mandatory
14408    if (ok) {
14409        bool prs = lib_fast::GetPmapBit(pmap,1);
14410        if (prs) {
14411            ok = lib_fast::DecodeUnsigned(from,parent.MsgSeqNum,false);
14412            if (!ok) {
14413                state.error << "emdi12.QuoteRequest.MsgSeqNum: bad Unsigned" << eol;
14414            }
14415        } else if (MsgSeqNum_AssignedQ(state)) {
14416            parent.MsgSeqNum = state.MsgSeqNum + 1;
14417        } else {
14418            ok = false;
14419            state.error << "emdi12.QuoteRequest.MsgSeqNum: increment operator: previous value unassigned" << eol;
14420        }
14421        MsgSeqNum_SetAssigned(state);
14422        state.MsgSeqNum = parent.MsgSeqNum;
14423    }
14424    // SenderCompID unsigned copy mandatory
14425    if (ok) {
14426        bool prs = lib_fast::GetPmapBit(pmap,2);
14427        if (prs) {
14428            ok = lib_fast::DecodeUnsigned(from,parent.SenderCompID,false);
14429            if (!ok) {
14430                state.error << "emdi12.QuoteRequest.SenderCompID: bad Unsigned" << eol;
14431            }
14432        } else if (SenderCompID_AssignedQ(state)) {
14433            parent.SenderCompID = state.SenderCompID;
14434        } else {
14435            ok = false;
14436            state.error << "emdi12.QuoteRequest.SenderCompID: copy operator: previous value unassigned" << eol;
14437        }
14438        SenderCompID_SetAssigned(state);
14439        state.SenderCompID = parent.SenderCompID;
14440    }
14441    // MarketSegmentID unsigned copy mandatory
14442    if (ok) {
14443        bool prs = lib_fast::GetPmapBit(pmap,3);
14444        if (prs) {
14445            ok = lib_fast::DecodeUnsigned(from,parent.MarketSegmentID,false);
14446            if (!ok) {
14447                state.error << "emdi12.QuoteRequest.MarketSegmentID: bad Unsigned" << eol;
14448            }
14449        } else if (MarketSegmentID_AssignedQ(state)) {
14450            parent.MarketSegmentID = state.MarketSegmentID;
14451        } else {
14452            ok = false;
14453            state.error << "emdi12.QuoteRequest.MarketSegmentID: copy operator: previous value unassigned" << eol;
14454        }
14455        MarketSegmentID_SetAssigned(state);
14456        state.MarketSegmentID = parent.MarketSegmentID;
14457    }
14458    // QuotReqGrp sequence none mandatory
14459    if (ok) {
14460        ok = QuotReqGrp_FastDecode(from,state,parent.QuotReqGrp);
14461    }
14462    return ok;
14463}
14464
14465// --- emdi12.QuoteRequest..FixEncode
14466void emdi12::QuoteRequest_FixEncode(cstring& buf, emdi12::QuoteRequest& parent, char soh) {
14467    buf << "35=" << MsgType_Get(parent) << soh;
14468    buf << "34=" << parent.MsgSeqNum << soh;
14469    buf << "49=" << parent.SenderCompID << soh;
14470    buf << "1300=" << parent.MarketSegmentID << soh;
14471    buf << "146=1" << soh;
14472}
14473
14474// --- emdi12.RelatedInstrumentGrp..ReadFieldMaybe
14475bool emdi12::RelatedInstrumentGrp_ReadFieldMaybe(emdi12::RelatedInstrumentGrp& parent, algo::strptr field, algo::strptr strval) {
14476    bool retval = true;
14477    emdi12::FieldId field_id;
14478    (void)value_SetStrptrMaybe(field_id,field);
14479    switch(field_id) {
14480        case emdi12_FieldId_RelatedSecurityID: {
14481            retval = i64_ReadStrptrMaybe(parent.RelatedSecurityID, strval);
14482            break;
14483        }
14484        case emdi12_FieldId_RelatedSecurityIDSource: {
14485            retval = true;
14486            break;
14487        }
14488        default: break;
14489    }
14490    if (!retval) {
14491        algo_lib::AppendErrtext("attr",field);
14492    }
14493    return retval;
14494}
14495
14496// --- emdi12.RelatedInstrumentGrp..ReadStrptrMaybe
14497// Read fields of emdi12::RelatedInstrumentGrp from an ascii string.
14498// The format of the string is an ssim Tuple
14499bool emdi12::RelatedInstrumentGrp_ReadStrptrMaybe(emdi12::RelatedInstrumentGrp &parent, algo::strptr in_str) {
14500    bool retval = true;
14501    retval = algo::StripTypeTag(in_str, "emdi12.RelatedInstrumentGrp");
14502    ind_beg(algo::Attr_curs, attr, in_str) {
14503        retval = retval && RelatedInstrumentGrp_ReadFieldMaybe(parent, attr.name, attr.value);
14504    }ind_end;
14505    return retval;
14506}
14507
14508// --- emdi12.RelatedInstrumentGrp..Print
14509// print string representation of ROW to string STR
14510// cfmt:emdi12.RelatedInstrumentGrp.String  printfmt:Tuple
14511void emdi12::RelatedInstrumentGrp_Print(emdi12::RelatedInstrumentGrp& row, algo::cstring& str) {
14512    algo::tempstr temp;
14513    str << "emdi12.RelatedInstrumentGrp";
14514
14515    i64_Print(row.RelatedSecurityID, temp);
14516    PrintAttrSpaceReset(str,"RelatedSecurityID", temp);
14517
14518    algo::strptr_Print(RelatedSecurityIDSource_Get(row), temp);
14519    PrintAttrSpaceReset(str,"RelatedSecurityIDSource", temp);
14520}
14521
14522// --- emdi12.RelatedInstrumentGrp..FastEncode
14523void emdi12::RelatedInstrumentGrp_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::RelatedInstrumentGrp& parent) {
14524    // RelatedSecurityID signed delta mandatory
14525    if (!RelatedSecurityID_AssignedQ(state)) {
14526        RelatedSecurityID_SetAssigned(state);
14527        state.RelatedSecurityID = 0;
14528    }
14529    lib_fast::EncodeDeltaSigned(buf,state.RelatedSecurityID,parent.RelatedSecurityID,false);
14530    state.RelatedSecurityID = parent.RelatedSecurityID;
14531    // RelatedSecurityIDSource string constant mandatory
14532}
14533
14534// --- emdi12.RelatedInstrumentGrp..FastDecode
14535bool emdi12::RelatedInstrumentGrp_FastDecode(algo::memptr& from, FastState& state, emdi12::RelatedInstrumentGrp& parent) {
14536    bool ok = true;
14537    // RelatedSecurityID signed delta mandatory
14538    if (ok) {
14539        if (!RelatedSecurityID_AssignedQ(state)) {
14540            RelatedSecurityID_SetAssigned(state);
14541            state.RelatedSecurityID = 0;
14542        }
14543        ok = lib_fast::DecodeDeltaSigned(from,state.RelatedSecurityID,parent.RelatedSecurityID,false);
14544        if (!ok) {
14545            state.error << "emdi12.RelatedInstrumentGrp.RelatedSecurityID: bad Signed delta" << eol;
14546        }
14547        state.RelatedSecurityID = parent.RelatedSecurityID;
14548    }
14549    // RelatedSecurityIDSource string constant mandatory
14550    if (ok) {
14551    }
14552    return ok;
14553}
14554
14555// --- emdi12.RelatedInstrumentGrp..FixEncode
14556void emdi12::RelatedInstrumentGrp_FixEncode(cstring& buf, emdi12::RelatedInstrumentGrp& parent, char soh) {
14557    buf << "1650=" << parent.RelatedSecurityID << soh;
14558    buf << "1651=" << RelatedSecurityIDSource_Get(parent) << soh;
14559}
14560
14561// --- emdi12.Reset.base.CopyOut
14562// Copy fields out of row
14563void emdi12::parent_CopyOut(emdi12::Reset &row, emdi12::TemplateHeader &out) {
14564    // length: field value is computed
14565    // id: field value is computed
14566    (void)row;//only to avoid -Wunused-parameter
14567    (void)out;//only to avoid -Wunused-parameter
14568}
14569
14570// --- emdi12.Reset..ReadFieldMaybe
14571bool emdi12::Reset_ReadFieldMaybe(emdi12::Reset& parent, algo::strptr field, algo::strptr strval) {
14572    bool retval = true;
14573    emdi12::FieldId field_id;
14574    (void)value_SetStrptrMaybe(field_id,field);
14575    switch(field_id) {
14576        case emdi12_FieldId_base: {
14577            retval = false;
14578            break;
14579        }
14580        case emdi12_FieldId_length: {
14581            retval = false;
14582            break;
14583        }
14584        case emdi12_FieldId_id: {
14585            retval = false;
14586            break;
14587        }
14588        default: break;
14589    }
14590    if (!retval) {
14591        algo_lib::AppendErrtext("attr",field);
14592    }
14593    (void)parent;//only to avoid -Wunused-parameter
14594    (void)strval;//only to avoid -Wunused-parameter
14595    return retval;
14596}
14597
14598// --- emdi12.Reset..ReadStrptrMaybe
14599// Read fields of emdi12::Reset from an ascii string.
14600// The format of the string is an ssim Tuple
14601bool emdi12::Reset_ReadStrptrMaybe(emdi12::Reset &parent, algo::strptr in_str) {
14602    bool retval = true;
14603    retval = algo::StripTypeTag(in_str, "emdi12.Reset");
14604    ind_beg(algo::Attr_curs, attr, in_str) {
14605        retval = retval && Reset_ReadFieldMaybe(parent, attr.name, attr.value);
14606    }ind_end;
14607    return retval;
14608}
14609
14610// --- emdi12.Reset..Print
14611// print string representation of ROW to string STR
14612// cfmt:emdi12.Reset.String  printfmt:Tuple
14613void emdi12::Reset_Print(emdi12::Reset& row, algo::cstring& str) {
14614    algo::tempstr temp;
14615    str << "emdi12.Reset";
14616    (void)row;//only to avoid -Wunused-parameter
14617}
14618
14619// --- emdi12.Reset..FastEncode
14620void emdi12::Reset_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::Reset& parent) {
14621    int index = ary_N(buf);
14622    u64 pmap(0);
14623    if (!tid_AssignedQ(state) || parent.id != state.tid) {
14624        lib_fast::EncodeUnsigned(buf,parent.id,false);
14625        lib_fast::SetPmapBit(pmap,0);
14626    }
14627    tid_SetAssigned(state);
14628    state.tid = parent.id;
14629    lib_fast::InsertPmap(buf,index,pmap);
14630}
14631
14632// --- emdi12.Reset..FastDecode
14633bool emdi12::Reset_FastDecode(algo::memptr& from, u64 pmap, FastState& state, emdi12::Reset& parent) {
14634    bool ok = true;
14635    (void)from;//only to avoid -Wunused-parameter
14636    (void)pmap;//only to avoid -Wunused-parameter
14637    (void)state;//only to avoid -Wunused-parameter
14638    (void)parent;//only to avoid -Wunused-parameter
14639    return ok;
14640}
14641
14642// --- emdi12.Reset..FixEncode
14643void emdi12::Reset_FixEncode(cstring& buf, emdi12::Reset& parent, char soh) {
14644    (void)buf;//only to avoid -Wunused-parameter
14645    (void)parent;//only to avoid -Wunused-parameter
14646    (void)soh;//only to avoid -Wunused-parameter
14647}
14648
14649// --- emdi12.ScaledSimpleInstrumentUpdate.base.CopyOut
14650// Copy fields out of row
14651void emdi12::parent_CopyOut(emdi12::ScaledSimpleInstrumentUpdate &row, emdi12::TemplateHeader &out) {
14652    // length: field value is computed
14653    // id: field value is computed
14654    (void)row;//only to avoid -Wunused-parameter
14655    (void)out;//only to avoid -Wunused-parameter
14656}
14657
14658// --- emdi12.ScaledSimpleInstrumentUpdate..ReadFieldMaybe
14659bool emdi12::ScaledSimpleInstrumentUpdate_ReadFieldMaybe(emdi12::ScaledSimpleInstrumentUpdate& parent, algo::strptr field, algo::strptr strval) {
14660    bool retval = true;
14661    emdi12::FieldId field_id;
14662    (void)value_SetStrptrMaybe(field_id,field);
14663    switch(field_id) {
14664        case emdi12_FieldId_base: {
14665            retval = false;
14666            break;
14667        }
14668        case emdi12_FieldId_length: {
14669            retval = false;
14670            break;
14671        }
14672        case emdi12_FieldId_id: {
14673            retval = false;
14674            break;
14675        }
14676        case emdi12_FieldId_MsgType: {
14677            retval = true;
14678            break;
14679        }
14680        case emdi12_FieldId_MsgSeqNum: {
14681            retval = u32_ReadStrptrMaybe(parent.MsgSeqNum, strval);
14682            break;
14683        }
14684        case emdi12_FieldId_SenderCompID: {
14685            retval = u32_ReadStrptrMaybe(parent.SenderCompID, strval);
14686            break;
14687        }
14688        case emdi12_FieldId_SecurityUpdateAction: {
14689            retval = true;
14690            break;
14691        }
14692        case emdi12_FieldId_SecurityID: {
14693            retval = i64_ReadStrptrMaybe(parent.SecurityID, strval);
14694            break;
14695        }
14696        case emdi12_FieldId_SecurityIDSource: {
14697            retval = true;
14698            break;
14699        }
14700        case emdi12_FieldId_SecurityDesc: {
14701            retval = algo::Smallstr30_ReadStrptrMaybe(parent.SecurityDesc, strval);
14702            break;
14703        }
14704        case emdi12_FieldId_SecurityType: {
14705            retval = emdi12::SecurityType_ReadStrptrMaybe(parent.SecurityType, strval);
14706            break;
14707        }
14708        case emdi12_FieldId_ProductComplex: {
14709            retval = emdi12::ProductComplex_ReadStrptrMaybe(parent.ProductComplex, strval);
14710            break;
14711        }
14712        case emdi12_FieldId_QuantityScalingFactor: {
14713            retval = u32_ReadStrptrMaybe(parent.QuantityScalingFactor, strval);
14714            break;
14715        }
14716        case emdi12_FieldId_RelatedInstrumentGrp: {
14717            retval = emdi12::RelatedInstrumentGrp_ReadStrptrMaybe(parent.RelatedInstrumentGrp, strval);
14718            break;
14719        }
14720        case emdi12_FieldId_MarketSegmentGrp3: {
14721            retval = emdi12::MarketSegmentGrp3_ReadStrptrMaybe(parent.MarketSegmentGrp3, strval);
14722            break;
14723        }
14724        case emdi12_FieldId_TransactTime: {
14725            retval = i64_ReadStrptrMaybe(parent.TransactTime, strval);
14726            break;
14727        }
14728        default: break;
14729    }
14730    if (!retval) {
14731        algo_lib::AppendErrtext("attr",field);
14732    }
14733    return retval;
14734}
14735
14736// --- emdi12.ScaledSimpleInstrumentUpdate..ReadStrptrMaybe
14737// Read fields of emdi12::ScaledSimpleInstrumentUpdate from an ascii string.
14738// The format of the string is an ssim Tuple
14739bool emdi12::ScaledSimpleInstrumentUpdate_ReadStrptrMaybe(emdi12::ScaledSimpleInstrumentUpdate &parent, algo::strptr in_str) {
14740    bool retval = true;
14741    retval = algo::StripTypeTag(in_str, "emdi12.ScaledSimpleInstrumentUpdate");
14742    ind_beg(algo::Attr_curs, attr, in_str) {
14743        retval = retval && ScaledSimpleInstrumentUpdate_ReadFieldMaybe(parent, attr.name, attr.value);
14744    }ind_end;
14745    return retval;
14746}
14747
14748// --- emdi12.ScaledSimpleInstrumentUpdate..Init
14749// Set all fields to initial values.
14750void emdi12::ScaledSimpleInstrumentUpdate_Init(emdi12::ScaledSimpleInstrumentUpdate& parent) {
14751    parent.length = u32(ssizeof(parent) + (0));
14752    parent.id = u32(516);
14753    parent.MsgSeqNum = u32(0);
14754    parent.SenderCompID = u32(0);
14755    parent.SecurityID = i64(0);
14756    parent.QuantityScalingFactor = u32(0);
14757    parent.TransactTime = i64(0);
14758}
14759
14760// --- emdi12.ScaledSimpleInstrumentUpdate..Print
14761// print string representation of ROW to string STR
14762// cfmt:emdi12.ScaledSimpleInstrumentUpdate.String  printfmt:Tuple
14763void emdi12::ScaledSimpleInstrumentUpdate_Print(emdi12::ScaledSimpleInstrumentUpdate& row, algo::cstring& str) {
14764    algo::tempstr temp;
14765    str << "emdi12.ScaledSimpleInstrumentUpdate";
14766
14767    algo::strptr_Print(MsgType_Get(row), temp);
14768    PrintAttrSpaceReset(str,"MsgType", temp);
14769
14770    u32_Print(row.MsgSeqNum, temp);
14771    PrintAttrSpaceReset(str,"MsgSeqNum", temp);
14772
14773    u32_Print(row.SenderCompID, temp);
14774    PrintAttrSpaceReset(str,"SenderCompID", temp);
14775
14776    algo::strptr_Print(SecurityUpdateAction_Get(row), temp);
14777    PrintAttrSpaceReset(str,"SecurityUpdateAction", temp);
14778
14779    i64_Print(row.SecurityID, temp);
14780    PrintAttrSpaceReset(str,"SecurityID", temp);
14781
14782    algo::strptr_Print(SecurityIDSource_Get(row), temp);
14783    PrintAttrSpaceReset(str,"SecurityIDSource", temp);
14784
14785    algo::Smallstr30_Print(row.SecurityDesc, temp);
14786    PrintAttrSpaceReset(str,"SecurityDesc", temp);
14787
14788    emdi12::SecurityType_Print(row.SecurityType, temp);
14789    PrintAttrSpaceReset(str,"SecurityType", temp);
14790
14791    emdi12::ProductComplex_Print(row.ProductComplex, temp);
14792    PrintAttrSpaceReset(str,"ProductComplex", temp);
14793
14794    u32_Print(row.QuantityScalingFactor, temp);
14795    PrintAttrSpaceReset(str,"QuantityScalingFactor", temp);
14796
14797    emdi12::RelatedInstrumentGrp_Print(row.RelatedInstrumentGrp, temp);
14798    PrintAttrSpaceReset(str,"RelatedInstrumentGrp", temp);
14799
14800    emdi12::MarketSegmentGrp3_Print(row.MarketSegmentGrp3, temp);
14801    PrintAttrSpaceReset(str,"MarketSegmentGrp3", temp);
14802
14803    i64_Print(row.TransactTime, temp);
14804    PrintAttrSpaceReset(str,"TransactTime", temp);
14805}
14806
14807// --- emdi12.ScaledSimpleInstrumentUpdate..FastEncode
14808void emdi12::ScaledSimpleInstrumentUpdate_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::ScaledSimpleInstrumentUpdate& parent) {
14809    int index = ary_N(buf);
14810    u64 pmap(0);
14811    if (!tid_AssignedQ(state) || parent.id != state.tid) {
14812        lib_fast::EncodeUnsigned(buf,parent.id,false);
14813        lib_fast::SetPmapBit(pmap,0);
14814    }
14815    tid_SetAssigned(state);
14816    state.tid = parent.id;
14817    // MsgType string constant mandatory
14818    // MsgSeqNum unsigned increment mandatory
14819    if (MsgSeqNum_AssignedQ(state)) {
14820        if (parent.MsgSeqNum != state.MsgSeqNum + 1) {
14821            lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
14822            lib_fast::SetPmapBit(pmap,1);
14823        }
14824    } else {
14825        lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
14826        lib_fast::SetPmapBit(pmap,1);
14827    }
14828    state.MsgSeqNum = parent.MsgSeqNum;
14829    MsgSeqNum_SetAssigned(state);
14830    // SenderCompID unsigned copy mandatory
14831    if (!SenderCompID_AssignedQ(state) || parent.SenderCompID != state.SenderCompID) {
14832        lib_fast::EncodeUnsigned(buf,parent.SenderCompID,false);
14833        lib_fast::SetPmapBit(pmap,2);
14834    }
14835    state.SenderCompID = parent.SenderCompID;
14836    SenderCompID_SetAssigned(state);
14837    // SecurityUpdateAction string constant mandatory
14838    // SecurityID signed none mandatory
14839    lib_fast::EncodeSigned(buf,parent.SecurityID,false);
14840    // SecurityIDSource string constant mandatory
14841    // SecurityDesc string none mandatory
14842    lib_fast::EncodeString(buf,parent.SecurityDesc,false);
14843    // SecurityType type none mandatory
14844    lib_fast::EncodeUnsigned(buf,parent.SecurityType.value,false);
14845    // ProductComplex type none mandatory
14846    lib_fast::EncodeUnsigned(buf,parent.ProductComplex.value,false);
14847    // QuantityScalingFactor unsigned none mandatory
14848    lib_fast::EncodeUnsigned(buf,parent.QuantityScalingFactor,false);
14849    // RelatedInstrumentGrp group none mandatory
14850    RelatedInstrumentGrp_FastEncode(buf,state,parent.RelatedInstrumentGrp);
14851    // MarketSegmentGrp3 sequence none mandatory
14852    MarketSegmentGrp3_FastEncode(buf,state,parent.MarketSegmentGrp3);
14853    // TransactTime signed none mandatory
14854    lib_fast::EncodeSigned(buf,parent.TransactTime,false);
14855    lib_fast::InsertPmap(buf,index,pmap);
14856}
14857
14858// --- emdi12.ScaledSimpleInstrumentUpdate..FastDecode
14859bool emdi12::ScaledSimpleInstrumentUpdate_FastDecode(algo::memptr& from, u64 pmap, FastState& state, emdi12::ScaledSimpleInstrumentUpdate& parent) {
14860    bool ok = true;
14861    // MsgType string constant mandatory
14862    if (ok) {
14863    }
14864    // MsgSeqNum unsigned increment mandatory
14865    if (ok) {
14866        bool prs = lib_fast::GetPmapBit(pmap,1);
14867        if (prs) {
14868            ok = lib_fast::DecodeUnsigned(from,parent.MsgSeqNum,false);
14869            if (!ok) {
14870                state.error << "emdi12.ScaledSimpleInstrumentUpdate.MsgSeqNum: bad Unsigned" << eol;
14871            }
14872        } else if (MsgSeqNum_AssignedQ(state)) {
14873            parent.MsgSeqNum = state.MsgSeqNum + 1;
14874        } else {
14875            ok = false;
14876            state.error << "emdi12.ScaledSimpleInstrumentUpdate.MsgSeqNum: increment operator: previous value unassigned" << eol;
14877        }
14878        MsgSeqNum_SetAssigned(state);
14879        state.MsgSeqNum = parent.MsgSeqNum;
14880    }
14881    // SenderCompID unsigned copy mandatory
14882    if (ok) {
14883        bool prs = lib_fast::GetPmapBit(pmap,2);
14884        if (prs) {
14885            ok = lib_fast::DecodeUnsigned(from,parent.SenderCompID,false);
14886            if (!ok) {
14887                state.error << "emdi12.ScaledSimpleInstrumentUpdate.SenderCompID: bad Unsigned" << eol;
14888            }
14889        } else if (SenderCompID_AssignedQ(state)) {
14890            parent.SenderCompID = state.SenderCompID;
14891        } else {
14892            ok = false;
14893            state.error << "emdi12.ScaledSimpleInstrumentUpdate.SenderCompID: copy operator: previous value unassigned" << eol;
14894        }
14895        SenderCompID_SetAssigned(state);
14896        state.SenderCompID = parent.SenderCompID;
14897    }
14898    // SecurityUpdateAction string constant mandatory
14899    if (ok) {
14900    }
14901    // SecurityID signed none mandatory
14902    if (ok) {
14903        ok = lib_fast::DecodeSigned(from,parent.SecurityID,false);
14904        if (!ok) {
14905            state.error << "emdi12.ScaledSimpleInstrumentUpdate.SecurityID: bad Signed" << eol;
14906        }
14907    }
14908    // SecurityIDSource string constant mandatory
14909    if (ok) {
14910    }
14911    // SecurityDesc string none mandatory
14912    if (ok) {
14913        ok = lib_fast::DecodeString(from,parent.SecurityDesc,false);
14914        if (!ok) {
14915            state.error << "emdi12.ScaledSimpleInstrumentUpdate.SecurityDesc: bad String" << eol;
14916        }
14917    }
14918    // SecurityType type none mandatory
14919    if (ok) {
14920        ok = lib_fast::DecodeUnsigned(from,parent.SecurityType.value,false);
14921        if (!ok) {
14922            state.error << "emdi12.ScaledSimpleInstrumentUpdate.SecurityType: bad Unsigned" << eol;
14923        }
14924    }
14925    // ProductComplex type none mandatory
14926    if (ok) {
14927        ok = lib_fast::DecodeUnsigned(from,parent.ProductComplex.value,false);
14928        if (!ok) {
14929            state.error << "emdi12.ScaledSimpleInstrumentUpdate.ProductComplex: bad Unsigned" << eol;
14930        }
14931    }
14932    // QuantityScalingFactor unsigned none mandatory
14933    if (ok) {
14934        ok = lib_fast::DecodeUnsigned(from,parent.QuantityScalingFactor,false);
14935        if (!ok) {
14936            state.error << "emdi12.ScaledSimpleInstrumentUpdate.QuantityScalingFactor: bad Unsigned" << eol;
14937        }
14938    }
14939    // RelatedInstrumentGrp group none mandatory
14940    if (ok) {
14941        ok = RelatedInstrumentGrp_FastDecode(from,state,parent.RelatedInstrumentGrp);
14942    }
14943    // MarketSegmentGrp3 sequence none mandatory
14944    if (ok) {
14945        ok = MarketSegmentGrp3_FastDecode(from,state,parent.MarketSegmentGrp3);
14946    }
14947    // TransactTime signed none mandatory
14948    if (ok) {
14949        ok = lib_fast::DecodeSigned(from,parent.TransactTime,false);
14950        if (!ok) {
14951            state.error << "emdi12.ScaledSimpleInstrumentUpdate.TransactTime: bad Signed" << eol;
14952        }
14953    }
14954    return ok;
14955}
14956
14957// --- emdi12.ScaledSimpleInstrumentUpdate..FixEncode
14958void emdi12::ScaledSimpleInstrumentUpdate_FixEncode(cstring& buf, emdi12::ScaledSimpleInstrumentUpdate& parent, char soh) {
14959    buf << "35=" << MsgType_Get(parent) << soh;
14960    buf << "34=" << parent.MsgSeqNum << soh;
14961    buf << "49=" << parent.SenderCompID << soh;
14962    buf << "980=" << SecurityUpdateAction_Get(parent) << soh;
14963    buf << "48=" << parent.SecurityID << soh;
14964    buf << "22=" << SecurityIDSource_Get(parent) << soh;
14965    buf << "107=" << parent.SecurityDesc << soh;
14966    buf << "167=" << parent.SecurityType << soh;
14967    buf << "1227=" << parent.ProductComplex << soh;
14968    buf << "28907=" << parent.QuantityScalingFactor << soh;
14969    RelatedInstrumentGrp_FixEncode(buf,parent.RelatedInstrumentGrp, soh);
14970    buf << "1310=1" << soh;
14971    buf << "60=" << parent.TransactTime << soh;
14972}
14973
14974// --- emdi12.TemplateHeader.id.ToCstr
14975// Convert numeric value of field to one of predefined string constants.
14976// If string is found, return a static C string. Otherwise, return NULL.
14977const char* emdi12::id_ToCstr(const emdi12::TemplateHeader& parent) {
14978    const char *ret = NULL;
14979    switch(id_GetEnum(parent)) {
14980        case emdi12_TemplateHeader_id_emdi12_Beacon: ret = "emdi12.Beacon";  break;
14981        case emdi12_TemplateHeader_id_emdi12_ComplexInstrumentUpdate: ret = "emdi12.ComplexInstrumentUpdate";  break;
14982        case emdi12_TemplateHeader_id_emdi12_CrossRequest: ret = "emdi12.CrossRequest";  break;
14983        case emdi12_TemplateHeader_id_emdi12_DepthIncremental: ret = "emdi12.DepthIncremental";  break;
14984        case emdi12_TemplateHeader_id_emdi12_DepthSnapshot: ret = "emdi12.DepthSnapshot";  break;
14985        case emdi12_TemplateHeader_id_emdi12_EMDPacketHeader: ret = "emdi12.EMDPacketHeader";  break;
14986        case emdi12_TemplateHeader_id_emdi12_FlexibleInstrumentUpdate: ret = "emdi12.FlexibleInstrumentUpdate";  break;
14987        case emdi12_TemplateHeader_id_emdi12_InstrumentStateChange: ret = "emdi12.InstrumentStateChange";  break;
14988        case emdi12_TemplateHeader_id_emdi12_MassInstrumentStateChange: ret = "emdi12.MassInstrumentStateChange";  break;
14989        case emdi12_TemplateHeader_id_emdi12_ProductStateChange: ret = "emdi12.ProductStateChange";  break;
14990        case emdi12_TemplateHeader_id_emdi12_QuoteRequest: ret = "emdi12.QuoteRequest";  break;
14991        case emdi12_TemplateHeader_id_emdi12_Reset: ret = "emdi12.Reset";  break;
14992        case emdi12_TemplateHeader_id_emdi12_ScaledSimpleInstrumentUpdate: ret = "emdi12.ScaledSimpleInstrumentUpdate";  break;
14993        case emdi12_TemplateHeader_id_emdi12_TopOfBookImplied: ret = "emdi12.TopOfBookImplied";  break;
14994    }
14995    return ret;
14996}
14997
14998// --- emdi12.TemplateHeader.id.Print
14999// Convert id to a string. First, attempt conversion to a known string.
15000// If no string matches, print id as a numeric value.
15001void emdi12::id_Print(const emdi12::TemplateHeader& parent, algo::cstring &lhs) {
15002    const char *strval = id_ToCstr(parent);
15003    if (strval) {
15004        lhs << strval;
15005    } else {
15006        lhs << parent.id;
15007    }
15008}
15009
15010// --- emdi12.TemplateHeader.id.SetStrptrMaybe
15011// Convert string to field.
15012// If the string is invalid, do not modify field and return false.
15013// In case of success, return true
15014bool emdi12::id_SetStrptrMaybe(emdi12::TemplateHeader& parent, algo::strptr rhs) {
15015    bool ret = false;
15016    switch (elems_N(rhs)) {
15017        case 12: {
15018            switch (algo::ReadLE64(rhs.elems)) {
15019                case LE_STR8('e','m','d','i','1','2','.','R'): {
15020                    if (memcmp(rhs.elems+8,"eset",4)==0) { id_SetEnum(parent,emdi12_TemplateHeader_id_emdi12_Reset); ret = true; break; }
15021                    break;
15022                }
15023            }
15024            break;
15025        }
15026        case 13: {
15027            switch (algo::ReadLE64(rhs.elems)) {
15028                case LE_STR8('e','m','d','i','1','2','.','B'): {
15029                    if (memcmp(rhs.elems+8,"eacon",5)==0) { id_SetEnum(parent,emdi12_TemplateHeader_id_emdi12_Beacon); ret = true; break; }
15030                    break;
15031                }
15032            }
15033            break;
15034        }
15035        case 19: {
15036            switch (algo::ReadLE64(rhs.elems)) {
15037                case LE_STR8('e','m','d','i','1','2','.','C'): {
15038                    if (memcmp(rhs.elems+8,"rossRequest",11)==0) { id_SetEnum(parent,emdi12_TemplateHeader_id_emdi12_CrossRequest); ret = true; break; }
15039                    break;
15040                }
15041                case LE_STR8('e','m','d','i','1','2','.','Q'): {
15042                    if (memcmp(rhs.elems+8,"uoteRequest",11)==0) { id_SetEnum(parent,emdi12_TemplateHeader_id_emdi12_QuoteRequest); ret = true; break; }
15043                    break;
15044                }
15045            }
15046            break;
15047        }
15048        case 20: {
15049            switch (algo::ReadLE64(rhs.elems)) {
15050                case LE_STR8('e','m','d','i','1','2','.','D'): {
15051                    if (memcmp(rhs.elems+8,"epthSnapshot",12)==0) { id_SetEnum(parent,emdi12_TemplateHeader_id_emdi12_DepthSnapshot); ret = true; break; }
15052                    break;
15053                }
15054            }
15055            break;
15056        }
15057        case 22: {
15058            switch (algo::ReadLE64(rhs.elems)) {
15059                case LE_STR8('e','m','d','i','1','2','.','E'): {
15060                    if (memcmp(rhs.elems+8,"MDPacketHeader",14)==0) { id_SetEnum(parent,emdi12_TemplateHeader_id_emdi12_EMDPacketHeader); ret = true; break; }
15061                    break;
15062                }
15063            }
15064            break;
15065        }
15066        case 23: {
15067            switch (algo::ReadLE64(rhs.elems)) {
15068                case LE_STR8('e','m','d','i','1','2','.','D'): {
15069                    if (memcmp(rhs.elems+8,"epthIncremental",15)==0) { id_SetEnum(parent,emdi12_TemplateHeader_id_emdi12_DepthIncremental); ret = true; break; }
15070                    break;
15071                }
15072                case LE_STR8('e','m','d','i','1','2','.','T'): {
15073                    if (memcmp(rhs.elems+8,"opOfBookImplied",15)==0) { id_SetEnum(parent,emdi12_TemplateHeader_id_emdi12_TopOfBookImplied); ret = true; break; }
15074                    break;
15075                }
15076            }
15077            break;
15078        }
15079        case 25: {
15080            switch (algo::ReadLE64(rhs.elems)) {
15081                case LE_STR8('e','m','d','i','1','2','.','P'): {
15082                    if (memcmp(rhs.elems+8,"roductStateChange",17)==0) { id_SetEnum(parent,emdi12_TemplateHeader_id_emdi12_ProductStateChange); ret = true; break; }
15083                    break;
15084                }
15085            }
15086            break;
15087        }
15088        case 28: {
15089            switch (algo::ReadLE64(rhs.elems)) {
15090                case LE_STR8('e','m','d','i','1','2','.','I'): {
15091                    if (memcmp(rhs.elems+8,"nstrumentStateChange",20)==0) { id_SetEnum(parent,emdi12_TemplateHeader_id_emdi12_InstrumentStateChange); ret = true; break; }
15092                    break;
15093                }
15094            }
15095            break;
15096        }
15097        case 30: {
15098            switch (algo::ReadLE64(rhs.elems)) {
15099                case LE_STR8('e','m','d','i','1','2','.','C'): {
15100                    if (memcmp(rhs.elems+8,"omplexInstrumentUpdate",22)==0) { id_SetEnum(parent,emdi12_TemplateHeader_id_emdi12_ComplexInstrumentUpdate); ret = true; break; }
15101                    break;
15102                }
15103            }
15104            break;
15105        }
15106        case 31: {
15107            switch (algo::ReadLE64(rhs.elems)) {
15108                case LE_STR8('e','m','d','i','1','2','.','F'): {
15109                    if (memcmp(rhs.elems+8,"lexibleInstrumentUpdate",23)==0) { id_SetEnum(parent,emdi12_TemplateHeader_id_emdi12_FlexibleInstrumentUpdate); ret = true; break; }
15110                    break;
15111                }
15112            }
15113            break;
15114        }
15115        case 32: {
15116            switch (algo::ReadLE64(rhs.elems)) {
15117                case LE_STR8('e','m','d','i','1','2','.','M'): {
15118                    if (memcmp(rhs.elems+8,"assInstrumentStateChange",24)==0) { id_SetEnum(parent,emdi12_TemplateHeader_id_emdi12_MassInstrumentStateChange); ret = true; break; }
15119                    break;
15120                }
15121            }
15122            break;
15123        }
15124        case 35: {
15125            switch (algo::ReadLE64(rhs.elems)) {
15126                case LE_STR8('e','m','d','i','1','2','.','S'): {
15127                    if (memcmp(rhs.elems+8,"caledSimpleInstrumentUpdate",27)==0) { id_SetEnum(parent,emdi12_TemplateHeader_id_emdi12_ScaledSimpleInstrumentUpdate); ret = true; break; }
15128                    break;
15129                }
15130            }
15131            break;
15132        }
15133    }
15134    return ret;
15135}
15136
15137// --- emdi12.TemplateHeader.id.SetStrptr
15138// Convert string to field.
15139// If the string is invalid, set numeric value to DFLT
15140void emdi12::id_SetStrptr(emdi12::TemplateHeader& parent, algo::strptr rhs, emdi12_TemplateHeader_id_Enum dflt) {
15141    if (!id_SetStrptrMaybe(parent,rhs)) id_SetEnum(parent,dflt);
15142}
15143
15144// --- emdi12.TemplateHeader.id.ReadStrptrMaybe
15145// Convert string to field. Return success value
15146bool emdi12::id_ReadStrptrMaybe(emdi12::TemplateHeader& parent, algo::strptr rhs) {
15147    bool retval = false;
15148    retval = id_SetStrptrMaybe(parent,rhs); // try symbol conversion
15149    if (!retval) { // didn't work? try reading as underlying type
15150        retval = u32_ReadStrptrMaybe(parent.id,rhs);
15151    }
15152    return retval;
15153}
15154
15155// --- emdi12.TemplateHeader..ReadFieldMaybe
15156bool emdi12::TemplateHeader_ReadFieldMaybe(emdi12::TemplateHeader& parent, algo::strptr field, algo::strptr strval) {
15157    bool retval = true;
15158    emdi12::FieldId field_id;
15159    (void)value_SetStrptrMaybe(field_id,field);
15160    switch(field_id) {
15161        case emdi12_FieldId_length: {
15162            retval = false;
15163            break;
15164        }
15165        case emdi12_FieldId_id: {
15166            retval = id_ReadStrptrMaybe(parent, strval);
15167            break;
15168        }
15169        default: break;
15170    }
15171    if (!retval) {
15172        algo_lib::AppendErrtext("attr",field);
15173    }
15174    return retval;
15175}
15176
15177// --- emdi12.TemplateHeader..ReadStrptrMaybe
15178// Read fields of emdi12::TemplateHeader from an ascii string.
15179// The format of the string is an ssim Tuple
15180bool emdi12::TemplateHeader_ReadStrptrMaybe(emdi12::TemplateHeader &parent, algo::strptr in_str) {
15181    bool retval = true;
15182    retval = algo::StripTypeTag(in_str, "emdi12.TemplateHeader");
15183    ind_beg(algo::Attr_curs, attr, in_str) {
15184        retval = retval && TemplateHeader_ReadFieldMaybe(parent, attr.name, attr.value);
15185    }ind_end;
15186    return retval;
15187}
15188
15189// --- emdi12.TemplateHeader..Print
15190// print string representation of ROW to string STR
15191// cfmt:emdi12.TemplateHeader.String  printfmt:Tuple
15192void emdi12::TemplateHeader_Print(emdi12::TemplateHeader& row, algo::cstring& str) {
15193    algo::tempstr temp;
15194    str << "emdi12.TemplateHeader";
15195    (void)row;//only to avoid -Wunused-parameter
15196}
15197
15198// --- emdi12.TemplateHeaderMsgsCase.value.ToCstr
15199// Convert numeric value of field to one of predefined string constants.
15200// If string is found, return a static C string. Otherwise, return NULL.
15201const char* emdi12::value_ToCstr(const emdi12::TemplateHeaderMsgsCase& parent) {
15202    const char *ret = NULL;
15203    switch(value_GetEnum(parent)) {
15204        case emdi12_TemplateHeaderMsgsCase_emdi12_Beacon: ret = "emdi12.Beacon";  break;
15205        case emdi12_TemplateHeaderMsgsCase_emdi12_ComplexInstrumentUpdate: ret = "emdi12.ComplexInstrumentUpdate";  break;
15206        case emdi12_TemplateHeaderMsgsCase_emdi12_CrossRequest: ret = "emdi12.CrossRequest";  break;
15207        case emdi12_TemplateHeaderMsgsCase_emdi12_DepthIncremental: ret = "emdi12.DepthIncremental";  break;
15208        case emdi12_TemplateHeaderMsgsCase_emdi12_DepthSnapshot: ret = "emdi12.DepthSnapshot";  break;
15209        case emdi12_TemplateHeaderMsgsCase_emdi12_EMDPacketHeader: ret = "emdi12.EMDPacketHeader";  break;
15210        case emdi12_TemplateHeaderMsgsCase_emdi12_FlexibleInstrumentUpdate: ret = "emdi12.FlexibleInstrumentUpdate";  break;
15211        case emdi12_TemplateHeaderMsgsCase_emdi12_InstrumentStateChange: ret = "emdi12.InstrumentStateChange";  break;
15212        case emdi12_TemplateHeaderMsgsCase_emdi12_MassInstrumentStateChange: ret = "emdi12.MassInstrumentStateChange";  break;
15213        case emdi12_TemplateHeaderMsgsCase_emdi12_ProductStateChange: ret = "emdi12.ProductStateChange";  break;
15214        case emdi12_TemplateHeaderMsgsCase_emdi12_QuoteRequest: ret = "emdi12.QuoteRequest";  break;
15215        case emdi12_TemplateHeaderMsgsCase_emdi12_Reset: ret = "emdi12.Reset";  break;
15216        case emdi12_TemplateHeaderMsgsCase_emdi12_ScaledSimpleInstrumentUpdate: ret = "emdi12.ScaledSimpleInstrumentUpdate";  break;
15217        case emdi12_TemplateHeaderMsgsCase_emdi12_TopOfBookImplied: ret = "emdi12.TopOfBookImplied";  break;
15218    }
15219    return ret;
15220}
15221
15222// --- emdi12.TemplateHeaderMsgsCase.value.Print
15223// Convert value to a string. First, attempt conversion to a known string.
15224// If no string matches, print value as a numeric value.
15225void emdi12::value_Print(const emdi12::TemplateHeaderMsgsCase& parent, algo::cstring &lhs) {
15226    const char *strval = value_ToCstr(parent);
15227    if (strval) {
15228        lhs << strval;
15229    } else {
15230        lhs << parent.value;
15231    }
15232}
15233
15234// --- emdi12.TemplateHeaderMsgsCase.value.SetStrptrMaybe
15235// Convert string to field.
15236// If the string is invalid, do not modify field and return false.
15237// In case of success, return true
15238bool emdi12::value_SetStrptrMaybe(emdi12::TemplateHeaderMsgsCase& parent, algo::strptr rhs) {
15239    bool ret = false;
15240    switch (elems_N(rhs)) {
15241        case 12: {
15242            switch (algo::ReadLE64(rhs.elems)) {
15243                case LE_STR8('e','m','d','i','1','2','.','R'): {
15244                    if (memcmp(rhs.elems+8,"eset",4)==0) { value_SetEnum(parent,emdi12_TemplateHeaderMsgsCase_emdi12_Reset); ret = true; break; }
15245                    break;
15246                }
15247            }
15248            break;
15249        }
15250        case 13: {
15251            switch (algo::ReadLE64(rhs.elems)) {
15252                case LE_STR8('e','m','d','i','1','2','.','B'): {
15253                    if (memcmp(rhs.elems+8,"eacon",5)==0) { value_SetEnum(parent,emdi12_TemplateHeaderMsgsCase_emdi12_Beacon); ret = true; break; }
15254                    break;
15255                }
15256            }
15257            break;
15258        }
15259        case 19: {
15260            switch (algo::ReadLE64(rhs.elems)) {
15261                case LE_STR8('e','m','d','i','1','2','.','C'): {
15262                    if (memcmp(rhs.elems+8,"rossRequest",11)==0) { value_SetEnum(parent,emdi12_TemplateHeaderMsgsCase_emdi12_CrossRequest); ret = true; break; }
15263                    break;
15264                }
15265                case LE_STR8('e','m','d','i','1','2','.','Q'): {
15266                    if (memcmp(rhs.elems+8,"uoteRequest",11)==0) { value_SetEnum(parent,emdi12_TemplateHeaderMsgsCase_emdi12_QuoteRequest); ret = true; break; }
15267                    break;
15268                }
15269            }
15270            break;
15271        }
15272        case 20: {
15273            switch (algo::ReadLE64(rhs.elems)) {
15274                case LE_STR8('e','m','d','i','1','2','.','D'): {
15275                    if (memcmp(rhs.elems+8,"epthSnapshot",12)==0) { value_SetEnum(parent,emdi12_TemplateHeaderMsgsCase_emdi12_DepthSnapshot); ret = true; break; }
15276                    break;
15277                }
15278            }
15279            break;
15280        }
15281        case 22: {
15282            switch (algo::ReadLE64(rhs.elems)) {
15283                case LE_STR8('e','m','d','i','1','2','.','E'): {
15284                    if (memcmp(rhs.elems+8,"MDPacketHeader",14)==0) { value_SetEnum(parent,emdi12_TemplateHeaderMsgsCase_emdi12_EMDPacketHeader); ret = true; break; }
15285                    break;
15286                }
15287            }
15288            break;
15289        }
15290        case 23: {
15291            switch (algo::ReadLE64(rhs.elems)) {
15292                case LE_STR8('e','m','d','i','1','2','.','D'): {
15293                    if (memcmp(rhs.elems+8,"epthIncremental",15)==0) { value_SetEnum(parent,emdi12_TemplateHeaderMsgsCase_emdi12_DepthIncremental); ret = true; break; }
15294                    break;
15295                }
15296                case LE_STR8('e','m','d','i','1','2','.','T'): {
15297                    if (memcmp(rhs.elems+8,"opOfBookImplied",15)==0) { value_SetEnum(parent,emdi12_TemplateHeaderMsgsCase_emdi12_TopOfBookImplied); ret = true; break; }
15298                    break;
15299                }
15300            }
15301            break;
15302        }
15303        case 25: {
15304            switch (algo::ReadLE64(rhs.elems)) {
15305                case LE_STR8('e','m','d','i','1','2','.','P'): {
15306                    if (memcmp(rhs.elems+8,"roductStateChange",17)==0) { value_SetEnum(parent,emdi12_TemplateHeaderMsgsCase_emdi12_ProductStateChange); ret = true; break; }
15307                    break;
15308                }
15309            }
15310            break;
15311        }
15312        case 28: {
15313            switch (algo::ReadLE64(rhs.elems)) {
15314                case LE_STR8('e','m','d','i','1','2','.','I'): {
15315                    if (memcmp(rhs.elems+8,"nstrumentStateChange",20)==0) { value_SetEnum(parent,emdi12_TemplateHeaderMsgsCase_emdi12_InstrumentStateChange); ret = true; break; }
15316                    break;
15317                }
15318            }
15319            break;
15320        }
15321        case 30: {
15322            switch (algo::ReadLE64(rhs.elems)) {
15323                case LE_STR8('e','m','d','i','1','2','.','C'): {
15324                    if (memcmp(rhs.elems+8,"omplexInstrumentUpdate",22)==0) { value_SetEnum(parent,emdi12_TemplateHeaderMsgsCase_emdi12_ComplexInstrumentUpdate); ret = true; break; }
15325                    break;
15326                }
15327            }
15328            break;
15329        }
15330        case 31: {
15331            switch (algo::ReadLE64(rhs.elems)) {
15332                case LE_STR8('e','m','d','i','1','2','.','F'): {
15333                    if (memcmp(rhs.elems+8,"lexibleInstrumentUpdate",23)==0) { value_SetEnum(parent,emdi12_TemplateHeaderMsgsCase_emdi12_FlexibleInstrumentUpdate); ret = true; break; }
15334                    break;
15335                }
15336            }
15337            break;
15338        }
15339        case 32: {
15340            switch (algo::ReadLE64(rhs.elems)) {
15341                case LE_STR8('e','m','d','i','1','2','.','M'): {
15342                    if (memcmp(rhs.elems+8,"assInstrumentStateChange",24)==0) { value_SetEnum(parent,emdi12_TemplateHeaderMsgsCase_emdi12_MassInstrumentStateChange); ret = true; break; }
15343                    break;
15344                }
15345            }
15346            break;
15347        }
15348        case 35: {
15349            switch (algo::ReadLE64(rhs.elems)) {
15350                case LE_STR8('e','m','d','i','1','2','.','S'): {
15351                    if (memcmp(rhs.elems+8,"caledSimpleInstrumentUpdate",27)==0) { value_SetEnum(parent,emdi12_TemplateHeaderMsgsCase_emdi12_ScaledSimpleInstrumentUpdate); ret = true; break; }
15352                    break;
15353                }
15354            }
15355            break;
15356        }
15357    }
15358    return ret;
15359}
15360
15361// --- emdi12.TemplateHeaderMsgsCase.value.SetStrptr
15362// Convert string to field.
15363// If the string is invalid, set numeric value to DFLT
15364void emdi12::value_SetStrptr(emdi12::TemplateHeaderMsgsCase& parent, algo::strptr rhs, emdi12_TemplateHeaderMsgsCaseEnum dflt) {
15365    if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
15366}
15367
15368// --- emdi12.TemplateHeaderMsgsCase.value.ReadStrptrMaybe
15369// Convert string to field. Return success value
15370bool emdi12::value_ReadStrptrMaybe(emdi12::TemplateHeaderMsgsCase& parent, algo::strptr rhs) {
15371    bool retval = false;
15372    retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
15373    if (!retval) { // didn't work? try reading as underlying type
15374        retval = u32_ReadStrptrMaybe(parent.value,rhs);
15375    }
15376    return retval;
15377}
15378
15379// --- emdi12.TemplateHeaderMsgsCase..ReadStrptrMaybe
15380// Read fields of emdi12::TemplateHeaderMsgsCase from an ascii string.
15381// The format of the string is the format of the emdi12::TemplateHeaderMsgsCase's only field
15382bool emdi12::TemplateHeaderMsgsCase_ReadStrptrMaybe(emdi12::TemplateHeaderMsgsCase &parent, algo::strptr in_str) {
15383    bool retval = true;
15384    retval = retval && value_ReadStrptrMaybe(parent, in_str);
15385    return retval;
15386}
15387
15388// --- emdi12.TopOfBookImplied.base.CopyOut
15389// Copy fields out of row
15390void emdi12::parent_CopyOut(emdi12::TopOfBookImplied &row, emdi12::TemplateHeader &out) {
15391    // length: field value is computed
15392    // id: field value is computed
15393    (void)row;//only to avoid -Wunused-parameter
15394    (void)out;//only to avoid -Wunused-parameter
15395}
15396
15397// --- emdi12.TopOfBookImplied.MDIncGrp2.Getary
15398// Access var-length portion as an aryptr. Length is determined from one of the fields.
15399algo::aryptr<emdi12::MDIncGrp2> emdi12::MDIncGrp2_Getary(emdi12::TopOfBookImplied& parent) {
15400    return algo::aryptr<emdi12::MDIncGrp2>(MDIncGrp2_Addr(parent), MDIncGrp2_N(parent));
15401}
15402
15403// --- emdi12.TopOfBookImplied.MDIncGrp2.Addr
15404emdi12::MDIncGrp2* emdi12::MDIncGrp2_Addr(emdi12::TopOfBookImplied& parent) {
15405    return (emdi12::MDIncGrp2*)((u8*)&parent + sizeof(emdi12::TopOfBookImplied)); // address of varlen portion
15406}
15407
15408// --- emdi12.TopOfBookImplied.MDIncGrp2.ReadStrptrMaybe
15409// Convert string to field. Return success value
15410bool emdi12::MDIncGrp2_ReadStrptrMaybe(emdi12::TopOfBookImplied& parent, algo::strptr in_str) {
15411    bool retval = true;
15412    if (algo_lib::_db.varlenbuf) {
15413        emdi12::MDIncGrp2 *MDIncGrp2_tmp = new(ary_AllocN(*algo_lib::_db.varlenbuf, sizeof(emdi12::MDIncGrp2)).elems) emdi12::MDIncGrp2;
15414        retval = emdi12::MDIncGrp2_ReadStrptrMaybe(*MDIncGrp2_tmp, in_str);
15415    }
15416    (void)parent;//only to avoid -Wunused-parameter
15417    return retval;
15418}
15419
15420// --- emdi12.TopOfBookImplied..ReadFieldMaybe
15421bool emdi12::TopOfBookImplied_ReadFieldMaybe(emdi12::TopOfBookImplied& parent, algo::strptr field, algo::strptr strval) {
15422    bool retval = true;
15423    emdi12::FieldId field_id;
15424    (void)value_SetStrptrMaybe(field_id,algo::Pathcomp(field, ".LL"));
15425    switch(field_id) {
15426        case emdi12_FieldId_base: {
15427            retval = false;
15428            break;
15429        }
15430        case emdi12_FieldId_length: {
15431            retval = false;
15432            break;
15433        }
15434        case emdi12_FieldId_id: {
15435            retval = false;
15436            break;
15437        }
15438        case emdi12_FieldId_MsgType: {
15439            retval = true;
15440            break;
15441        }
15442        case emdi12_FieldId_MsgSeqNum: {
15443            retval = u32_ReadStrptrMaybe(parent.MsgSeqNum, strval);
15444            break;
15445        }
15446        case emdi12_FieldId_SenderCompID: {
15447            retval = u32_ReadStrptrMaybe(parent.SenderCompID, strval);
15448            break;
15449        }
15450        case emdi12_FieldId_MarketSegmentID: {
15451            retval = u32_ReadStrptrMaybe(parent.MarketSegmentID, strval);
15452            break;
15453        }
15454        case emdi12_FieldId_MDIncGrp2: {
15455            retval = MDIncGrp2_ReadStrptrMaybe(parent, strval);
15456            break;
15457        }
15458        default: break;
15459    }
15460    if (!retval) {
15461        algo_lib::AppendErrtext("attr",field);
15462    }
15463    return retval;
15464}
15465
15466// --- emdi12.TopOfBookImplied..ReadStrptrMaybe
15467// Any varlen fields are returned in algo_lib::_db.varlenbuf if set
15468// Read fields of emdi12::TopOfBookImplied from an ascii string.
15469// The format of the string is an ssim Tuple
15470bool emdi12::TopOfBookImplied_ReadStrptrMaybe(emdi12::TopOfBookImplied &parent, algo::strptr in_str) {
15471    bool retval = true;
15472    retval = algo::StripTypeTag(in_str, "emdi12.TopOfBookImplied");
15473    ind_beg(algo::Attr_curs, attr, in_str) {
15474        retval = retval && TopOfBookImplied_ReadFieldMaybe(parent, attr.name, attr.value);
15475    }ind_end;
15476    return retval;
15477}
15478
15479// --- emdi12.TopOfBookImplied..Print
15480// print string representation of ROW to string STR
15481// cfmt:emdi12.TopOfBookImplied.String  printfmt:Tuple
15482void emdi12::TopOfBookImplied_Print(emdi12::TopOfBookImplied& row, algo::cstring& str) {
15483    algo::tempstr temp;
15484    str << "emdi12.TopOfBookImplied";
15485
15486    algo::strptr_Print(MsgType_Get(row), temp);
15487    PrintAttrSpaceReset(str,"MsgType", temp);
15488
15489    u32_Print(row.MsgSeqNum, temp);
15490    PrintAttrSpaceReset(str,"MsgSeqNum", temp);
15491
15492    u32_Print(row.SenderCompID, temp);
15493    PrintAttrSpaceReset(str,"SenderCompID", temp);
15494
15495    u32_Print(row.MarketSegmentID, temp);
15496    PrintAttrSpaceReset(str,"MarketSegmentID", temp);
15497
15498    ind_beg(TopOfBookImplied_MDIncGrp2_curs,MDIncGrp2,row) {
15499        emdi12::MDIncGrp2_Print(MDIncGrp2, temp);
15500        tempstr name;
15501        name << "MDIncGrp2.";
15502        name << ind_curs(MDIncGrp2).index;
15503        PrintAttrSpaceReset(str, name, temp);
15504    }ind_end;
15505}
15506
15507// --- emdi12.TopOfBookImplied..FastEncode
15508void emdi12::TopOfBookImplied_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::TopOfBookImplied& parent) {
15509    int index = ary_N(buf);
15510    u64 pmap(0);
15511    if (!tid_AssignedQ(state) || parent.id != state.tid) {
15512        lib_fast::EncodeUnsigned(buf,parent.id,false);
15513        lib_fast::SetPmapBit(pmap,0);
15514    }
15515    tid_SetAssigned(state);
15516    state.tid = parent.id;
15517    // MsgType string constant mandatory
15518    // MsgSeqNum unsigned increment mandatory
15519    if (MsgSeqNum_AssignedQ(state)) {
15520        if (parent.MsgSeqNum != state.MsgSeqNum + 1) {
15521            lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
15522            lib_fast::SetPmapBit(pmap,1);
15523        }
15524    } else {
15525        lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
15526        lib_fast::SetPmapBit(pmap,1);
15527    }
15528    state.MsgSeqNum = parent.MsgSeqNum;
15529    MsgSeqNum_SetAssigned(state);
15530    // SenderCompID unsigned copy mandatory
15531    if (!SenderCompID_AssignedQ(state) || parent.SenderCompID != state.SenderCompID) {
15532        lib_fast::EncodeUnsigned(buf,parent.SenderCompID,false);
15533        lib_fast::SetPmapBit(pmap,2);
15534    }
15535    state.SenderCompID = parent.SenderCompID;
15536    SenderCompID_SetAssigned(state);
15537    // MarketSegmentID unsigned copy mandatory
15538    if (!MarketSegmentID_AssignedQ(state) || parent.MarketSegmentID != state.MarketSegmentID) {
15539        lib_fast::EncodeUnsigned(buf,parent.MarketSegmentID,false);
15540        lib_fast::SetPmapBit(pmap,3);
15541    }
15542    state.MarketSegmentID = parent.MarketSegmentID;
15543    MarketSegmentID_SetAssigned(state);
15544    // MDIncGrp2 sequence none mandatory
15545    {
15546        u32 length = MDIncGrp2_N(parent);
15547        lib_fast::EncodeUnsigned(buf,length,false);
15548        ind_beg(TopOfBookImplied_MDIncGrp2_curs,elem,parent) {
15549            MDIncGrp2_FastEncode(buf,state,elem);
15550        }ind_end;
15551    }
15552    lib_fast::InsertPmap(buf,index,pmap);
15553}
15554
15555// --- emdi12.TopOfBookImplied..FastDecode
15556bool emdi12::TopOfBookImplied_FastDecode(algo::memptr& from, u64 pmap, FastState& state, emdi12::TopOfBookImplied& parent) {
15557    bool ok = true;
15558    // MsgType string constant mandatory
15559    if (ok) {
15560    }
15561    // MsgSeqNum unsigned increment mandatory
15562    if (ok) {
15563        bool prs = lib_fast::GetPmapBit(pmap,1);
15564        if (prs) {
15565            ok = lib_fast::DecodeUnsigned(from,parent.MsgSeqNum,false);
15566            if (!ok) {
15567                state.error << "emdi12.TopOfBookImplied.MsgSeqNum: bad Unsigned" << eol;
15568            }
15569        } else if (MsgSeqNum_AssignedQ(state)) {
15570            parent.MsgSeqNum = state.MsgSeqNum + 1;
15571        } else {
15572            ok = false;
15573            state.error << "emdi12.TopOfBookImplied.MsgSeqNum: increment operator: previous value unassigned" << eol;
15574        }
15575        MsgSeqNum_SetAssigned(state);
15576        state.MsgSeqNum = parent.MsgSeqNum;
15577    }
15578    // SenderCompID unsigned copy mandatory
15579    if (ok) {
15580        bool prs = lib_fast::GetPmapBit(pmap,2);
15581        if (prs) {
15582            ok = lib_fast::DecodeUnsigned(from,parent.SenderCompID,false);
15583            if (!ok) {
15584                state.error << "emdi12.TopOfBookImplied.SenderCompID: bad Unsigned" << eol;
15585            }
15586        } else if (SenderCompID_AssignedQ(state)) {
15587            parent.SenderCompID = state.SenderCompID;
15588        } else {
15589            ok = false;
15590            state.error << "emdi12.TopOfBookImplied.SenderCompID: copy operator: previous value unassigned" << eol;
15591        }
15592        SenderCompID_SetAssigned(state);
15593        state.SenderCompID = parent.SenderCompID;
15594    }
15595    // MarketSegmentID unsigned copy mandatory
15596    if (ok) {
15597        bool prs = lib_fast::GetPmapBit(pmap,3);
15598        if (prs) {
15599            ok = lib_fast::DecodeUnsigned(from,parent.MarketSegmentID,false);
15600            if (!ok) {
15601                state.error << "emdi12.TopOfBookImplied.MarketSegmentID: bad Unsigned" << eol;
15602            }
15603        } else if (MarketSegmentID_AssignedQ(state)) {
15604            parent.MarketSegmentID = state.MarketSegmentID;
15605        } else {
15606            ok = false;
15607            state.error << "emdi12.TopOfBookImplied.MarketSegmentID: copy operator: previous value unassigned" << eol;
15608        }
15609        MarketSegmentID_SetAssigned(state);
15610        state.MarketSegmentID = parent.MarketSegmentID;
15611    }
15612    // MDIncGrp2 sequence none mandatory
15613    if (ok) {
15614        u32 length(0);
15615        ok = lib_fast::DecodeUnsigned(from,length,false);
15616        if (!ok) {
15617            state.error << "emdi12.TopOfBookImplied.MDIncGrp2: bad Unsigned" << eol;
15618        }
15619        if (!ok) {
15620            state.error << "emdi12.TopOfBookImplied.MDIncGrp2: bad length" << eol;
15621        }
15622        for (unsigned i=0; ok && i<length; ++i) {
15623            MDIncGrp2 &seq = *new(ary_AllocN(lib_fast::_db.varlen,sizeof seq).elems) MDIncGrp2;
15624            ok = MDIncGrp2_FastDecode(from,state,seq);
15625            if (!ok) {
15626                state.error << "emdi12.TopOfBookImplied.MDIncGrp2: element #"<< i+1 << eol;
15627            }
15628        }
15629    }
15630    return ok;
15631}
15632
15633// --- emdi12.TopOfBookImplied..FixEncode
15634void emdi12::TopOfBookImplied_FixEncode(cstring& buf, emdi12::TopOfBookImplied& parent, char soh) {
15635    buf << "35=" << MsgType_Get(parent) << soh;
15636    buf << "34=" << parent.MsgSeqNum << soh;
15637    buf << "49=" << parent.SenderCompID << soh;
15638    buf << "1300=" << parent.MarketSegmentID << soh;
15639    {
15640        u32 length = MDIncGrp2_N(parent);
15641        if (length) {
15642            buf << "268=" << length << soh;
15643        }
15644    }
15645    ind_beg(TopOfBookImplied_MDIncGrp2_curs,elem,parent) {
15646        MDIncGrp2_FixEncode(buf,elem,soh);
15647    }ind_end;
15648}
15649
15650// --- emdi12...SizeCheck
15651inline static void emdi12::SizeCheck() {
15652}
15653
15654// --- emdi12...StaticCheck
15655void emdi12::StaticCheck() {
15656    // check that bitfield fits width
15657    algo_assert(sizeof(((emdi12::TradeConditionSet*)0)->value)*8 >= 13);
15658    algo_assert(_offset_of(emdi12::FieldId, value) + sizeof(((emdi12::FieldId*)0)->value) == sizeof(emdi12::FieldId));
15659    algo_assert(_offset_of(emdi12::TemplateHeaderMsgsCase, value) + sizeof(((emdi12::TemplateHeaderMsgsCase*)0)->value) == sizeof(emdi12::TemplateHeaderMsgsCase));
15660    algo_assert(_offset_of(emdi12::TemplateHeader_curs, msglen) + sizeof(((emdi12::TemplateHeader_curs*)0)->msglen) == sizeof(emdi12::TemplateHeader_curs));
15661}
15662
15663// --- emdi12.TemplateHeaderMsgs..FastEncode
15664void emdi12::TemplateHeaderMsgs_FastEncode(algo::ByteAry &buf, FastState &state, emdi12::TemplateHeader &header)
15665 {
15666    switch (header.id) {
15667        case 109:
15668        emdi12::Beacon_FastEncode(buf,state,(emdi12::Beacon&)header);
15669        break;
15670        case 124:
15671        emdi12::ComplexInstrumentUpdate_FastEncode(buf,state,(emdi12::ComplexInstrumentUpdate&)header);
15672        break;
15673        case 96:
15674        emdi12::CrossRequest_FastEncode(buf,state,(emdi12::CrossRequest&)header);
15675        break;
15676        case 94:
15677        emdi12::DepthIncremental_FastEncode(buf,state,(emdi12::DepthIncremental&)header);
15678        break;
15679        case 93:
15680        emdi12::DepthSnapshot_FastEncode(buf,state,(emdi12::DepthSnapshot&)header);
15681        break;
15682        case 64:
15683        emdi12::EMDPacketHeader_FastEncode(buf,state,(emdi12::EMDPacketHeader&)header);
15684        break;
15685        case 100:
15686        emdi12::FlexibleInstrumentUpdate_FastEncode(buf,state,(emdi12::FlexibleInstrumentUpdate&)header);
15687        break;
15688        case 98:
15689        emdi12::InstrumentStateChange_FastEncode(buf,state,(emdi12::InstrumentStateChange&)header);
15690        break;
15691        case 99:
15692        emdi12::MassInstrumentStateChange_FastEncode(buf,state,(emdi12::MassInstrumentStateChange&)header);
15693        break;
15694        case 97:
15695        emdi12::ProductStateChange_FastEncode(buf,state,(emdi12::ProductStateChange&)header);
15696        break;
15697        case 95:
15698        emdi12::QuoteRequest_FastEncode(buf,state,(emdi12::QuoteRequest&)header);
15699        break;
15700        case 120:
15701        emdi12::Reset_FastEncode(buf,state,(emdi12::Reset&)header);
15702        state.assigned = 0;
15703        state.present = 0;
15704        break;
15705        case 516:
15706        emdi12::ScaledSimpleInstrumentUpdate_FastEncode(buf,state,(emdi12::ScaledSimpleInstrumentUpdate&)header);
15707        break;
15708        case 512:
15709        emdi12::TopOfBookImplied_FastEncode(buf,state,(emdi12::TopOfBookImplied&)header);
15710        break;
15711    }
15712}
15713
15714// --- emdi12.TemplateHeaderMsgs..FastDecode
15715emdi12::TemplateHeader * emdi12::TemplateHeaderMsgs_FastDecode(algo::memptr &from, FastState &state,algo::ByteAry &buf) {
15716    int index = ary_N(buf);
15717    TemplateHeader *ret(NULL);
15718    u64 pmap;
15719    u32 tid(0);
15720    bool ok = lib_fast::DecodePmap(from,pmap);
15721    if (!ok) {
15722        state.error << "emdi12.TemplateHeader: bad pmap" << eol;
15723    }
15724    if (ok) {
15725        bool prs = lib_fast::GetPmapBit(pmap,0);
15726        if (prs) {
15727            ok = lib_fast::DecodeUnsigned(from,tid,false);
15728            if (!ok) {
15729                state.error << "emdi12.TemplateHeader.id: bad Unsigned" << eol;
15730            }
15731        } else if (tid_AssignedQ(state)) {
15732            tid = state.tid;
15733        } else {
15734            ok = false;
15735            state.error << "emdi12.TemplateHeader.id: copy operator: previous value unassigned" << eol;
15736        }
15737        tid_SetAssigned(state);
15738        state.tid = tid;
15739    }
15740    if (ok) {
15741        switch (tid) {
15742            case 109:
15743            {
15744                emdi12::Beacon &msg = *new(ary_AllocN(buf,sizeof msg).elems) emdi12::Beacon;
15745                ok = Beacon_FastDecode(from,pmap,state,msg);
15746                ret = ok ? &Castbase(*(emdi12::Beacon*)(buf.ary_elems+index)) :  NULL;
15747            }
15748            break;
15749            case 124:
15750            {
15751                ary_RemoveAll(lib_fast::_db.varlen);
15752                emdi12::ComplexInstrumentUpdate &msg = *new(ary_AllocN(buf,sizeof msg).elems) emdi12::ComplexInstrumentUpdate;
15753                ok = ComplexInstrumentUpdate_FastDecode(from,pmap,state,msg);
15754                msg.length += ary_N(lib_fast::_db.varlen);
15755                ary_Addary(buf,ary_Getary(lib_fast::_db.varlen));
15756                ary_RemoveAll(lib_fast::_db.varlen);
15757                ret = ok ? &Castbase(*(emdi12::ComplexInstrumentUpdate*)(buf.ary_elems+index)) :  NULL;
15758            }
15759            break;
15760            case 96:
15761            {
15762                emdi12::CrossRequest &msg = *new(ary_AllocN(buf,sizeof msg).elems) emdi12::CrossRequest;
15763                ok = CrossRequest_FastDecode(from,pmap,state,msg);
15764                ret = ok ? &Castbase(*(emdi12::CrossRequest*)(buf.ary_elems+index)) :  NULL;
15765            }
15766            break;
15767            case 94:
15768            {
15769                ary_RemoveAll(lib_fast::_db.varlen);
15770                emdi12::DepthIncremental &msg = *new(ary_AllocN(buf,sizeof msg).elems) emdi12::DepthIncremental;
15771                ok = DepthIncremental_FastDecode(from,pmap,state,msg);
15772                msg.length += ary_N(lib_fast::_db.varlen);
15773                ary_Addary(buf,ary_Getary(lib_fast::_db.varlen));
15774                ary_RemoveAll(lib_fast::_db.varlen);
15775                ret = ok ? &Castbase(*(emdi12::DepthIncremental*)(buf.ary_elems+index)) :  NULL;
15776            }
15777            break;
15778            case 93:
15779            {
15780                ary_RemoveAll(lib_fast::_db.varlen);
15781                emdi12::DepthSnapshot &msg = *new(ary_AllocN(buf,sizeof msg).elems) emdi12::DepthSnapshot;
15782                ok = DepthSnapshot_FastDecode(from,pmap,state,msg);
15783                msg.length += ary_N(lib_fast::_db.varlen);
15784                ary_Addary(buf,ary_Getary(lib_fast::_db.varlen));
15785                ary_RemoveAll(lib_fast::_db.varlen);
15786                ret = ok ? &Castbase(*(emdi12::DepthSnapshot*)(buf.ary_elems+index)) :  NULL;
15787            }
15788            break;
15789            case 64:
15790            {
15791                emdi12::EMDPacketHeader &msg = *new(ary_AllocN(buf,sizeof msg).elems) emdi12::EMDPacketHeader;
15792                ok = EMDPacketHeader_FastDecode(from,pmap,state,msg);
15793                ret = ok ? &Castbase(*(emdi12::EMDPacketHeader*)(buf.ary_elems+index)) :  NULL;
15794            }
15795            break;
15796            case 100:
15797            {
15798                emdi12::FlexibleInstrumentUpdate &msg = *new(ary_AllocN(buf,sizeof msg).elems) emdi12::FlexibleInstrumentUpdate;
15799                ok = FlexibleInstrumentUpdate_FastDecode(from,pmap,state,msg);
15800                ret = ok ? &Castbase(*(emdi12::FlexibleInstrumentUpdate*)(buf.ary_elems+index)) :  NULL;
15801            }
15802            break;
15803            case 98:
15804            {
15805                emdi12::InstrumentStateChange &msg = *new(ary_AllocN(buf,sizeof msg).elems) emdi12::InstrumentStateChange;
15806                ok = InstrumentStateChange_FastDecode(from,pmap,state,msg);
15807                ret = ok ? &Castbase(*(emdi12::InstrumentStateChange*)(buf.ary_elems+index)) :  NULL;
15808            }
15809            break;
15810            case 99:
15811            {
15812                ary_RemoveAll(lib_fast::_db.varlen);
15813                emdi12::MassInstrumentStateChange &msg = *new(ary_AllocN(buf,sizeof msg).elems) emdi12::MassInstrumentStateChange;
15814                ok = MassInstrumentStateChange_FastDecode(from,pmap,state,msg);
15815                msg.length += ary_N(lib_fast::_db.varlen);
15816                ary_Addary(buf,ary_Getary(lib_fast::_db.varlen));
15817                ary_RemoveAll(lib_fast::_db.varlen);
15818                ret = ok ? &Castbase(*(emdi12::MassInstrumentStateChange*)(buf.ary_elems+index)) :  NULL;
15819            }
15820            break;
15821            case 97:
15822            {
15823                emdi12::ProductStateChange &msg = *new(ary_AllocN(buf,sizeof msg).elems) emdi12::ProductStateChange;
15824                ok = ProductStateChange_FastDecode(from,pmap,state,msg);
15825                ret = ok ? &Castbase(*(emdi12::ProductStateChange*)(buf.ary_elems+index)) :  NULL;
15826            }
15827            break;
15828            case 95:
15829            {
15830                emdi12::QuoteRequest &msg = *new(ary_AllocN(buf,sizeof msg).elems) emdi12::QuoteRequest;
15831                ok = QuoteRequest_FastDecode(from,pmap,state,msg);
15832                ret = ok ? &Castbase(*(emdi12::QuoteRequest*)(buf.ary_elems+index)) :  NULL;
15833            }
15834            break;
15835            case 120:
15836            {
15837                state.assigned = 0;
15838                state.present = 0;
15839                emdi12::Reset &msg = *new(ary_AllocN(buf,sizeof msg).elems) emdi12::Reset;
15840                ok = Reset_FastDecode(from,pmap,state,msg);
15841                ret = ok ? &Castbase(*(emdi12::Reset*)(buf.ary_elems+index)) :  NULL;
15842            }
15843            break;
15844            case 516:
15845            {
15846                emdi12::ScaledSimpleInstrumentUpdate &msg = *new(ary_AllocN(buf,sizeof msg).elems) emdi12::ScaledSimpleInstrumentUpdate;
15847                ok = ScaledSimpleInstrumentUpdate_FastDecode(from,pmap,state,msg);
15848                ret = ok ? &Castbase(*(emdi12::ScaledSimpleInstrumentUpdate*)(buf.ary_elems+index)) :  NULL;
15849            }
15850            break;
15851            case 512:
15852            {
15853                ary_RemoveAll(lib_fast::_db.varlen);
15854                emdi12::TopOfBookImplied &msg = *new(ary_AllocN(buf,sizeof msg).elems) emdi12::TopOfBookImplied;
15855                ok = TopOfBookImplied_FastDecode(from,pmap,state,msg);
15856                msg.length += ary_N(lib_fast::_db.varlen);
15857                ary_Addary(buf,ary_Getary(lib_fast::_db.varlen));
15858                ary_RemoveAll(lib_fast::_db.varlen);
15859                ret = ok ? &Castbase(*(emdi12::TopOfBookImplied*)(buf.ary_elems+index)) :  NULL;
15860            }
15861            break;
15862            default:
15863            ok = false;
15864            state.error << "emdi12.TemplateHeader.id: unknown template " << tid << eol;
15865        }
15866    }
15867    return ret;
15868}
15869
15870// --- emdi12.TemplateHeaderMsgs..FixEncode
15871void emdi12::TemplateHeaderMsgs_FixEncode(cstring &buf, emdi12::TemplateHeader &header, char soh) {
15872    switch (header.id) {
15873        case 109:
15874        Beacon_FixEncode(buf,*emdi12::Beacon_Castdown(header),soh);
15875        break;
15876        case 124:
15877        ComplexInstrumentUpdate_FixEncode(buf,*emdi12::ComplexInstrumentUpdate_Castdown(header),soh);
15878        break;
15879        case 96:
15880        CrossRequest_FixEncode(buf,*emdi12::CrossRequest_Castdown(header),soh);
15881        break;
15882        case 94:
15883        DepthIncremental_FixEncode(buf,*emdi12::DepthIncremental_Castdown(header),soh);
15884        break;
15885        case 93:
15886        DepthSnapshot_FixEncode(buf,*emdi12::DepthSnapshot_Castdown(header),soh);
15887        break;
15888        case 64:
15889        EMDPacketHeader_FixEncode(buf,*emdi12::EMDPacketHeader_Castdown(header),soh);
15890        break;
15891        case 100:
15892        FlexibleInstrumentUpdate_FixEncode(buf,*emdi12::FlexibleInstrumentUpdate_Castdown(header),soh);
15893        break;
15894        case 98:
15895        InstrumentStateChange_FixEncode(buf,*emdi12::InstrumentStateChange_Castdown(header),soh);
15896        break;
15897        case 99:
15898        MassInstrumentStateChange_FixEncode(buf,*emdi12::MassInstrumentStateChange_Castdown(header),soh);
15899        break;
15900        case 97:
15901        ProductStateChange_FixEncode(buf,*emdi12::ProductStateChange_Castdown(header),soh);
15902        break;
15903        case 95:
15904        QuoteRequest_FixEncode(buf,*emdi12::QuoteRequest_Castdown(header),soh);
15905        break;
15906        case 120:
15907        Reset_FixEncode(buf,*emdi12::Reset_Castdown(header),soh);
15908        break;
15909        case 516:
15910        ScaledSimpleInstrumentUpdate_FixEncode(buf,*emdi12::ScaledSimpleInstrumentUpdate_Castdown(header),soh);
15911        break;
15912        case 512:
15913        TopOfBookImplied_FixEncode(buf,*emdi12::TopOfBookImplied_Castdown(header),soh);
15914        break;
15915    }
15916}
15917
15918// --- emdi12.TemplateHeaderMsgs..Print
15919// Print message to STR. If message is too short for MSG_LEN, print nothing.
15920// MSG.LENGTH must have already been validated against msg_len.
15921// This function will additionally validate that sizeof(Msg) <= msg_len
15922bool emdi12::TemplateHeaderMsgs_Print(algo::cstring &str, emdi12::TemplateHeader &msg, u32 msg_len) {
15923    switch(msg.id) {
15924        case 109: {
15925            if (sizeof(emdi12::Beacon) > msg_len) { return false; }
15926            Beacon_Print((emdi12::Beacon&)(msg), str);
15927            return true;
15928        }
15929        case 124: {
15930            if (sizeof(emdi12::ComplexInstrumentUpdate) > msg_len) { return false; }
15931            ComplexInstrumentUpdate_Print((emdi12::ComplexInstrumentUpdate&)(msg), str);
15932            return true;
15933        }
15934        case 96: {
15935            if (sizeof(emdi12::CrossRequest) > msg_len) { return false; }
15936            CrossRequest_Print((emdi12::CrossRequest&)(msg), str);
15937            return true;
15938        }
15939        case 94: {
15940            if (sizeof(emdi12::DepthIncremental) > msg_len) { return false; }
15941            DepthIncremental_Print((emdi12::DepthIncremental&)(msg), str);
15942            return true;
15943        }
15944        case 93: {
15945            if (sizeof(emdi12::DepthSnapshot) > msg_len) { return false; }
15946            DepthSnapshot_Print((emdi12::DepthSnapshot&)(msg), str);
15947            return true;
15948        }
15949        case 64: {
15950            if (sizeof(emdi12::EMDPacketHeader) > msg_len) { return false; }
15951            EMDPacketHeader_Print((emdi12::EMDPacketHeader&)(msg), str);
15952            return true;
15953        }
15954        case 100: {
15955            if (sizeof(emdi12::FlexibleInstrumentUpdate) > msg_len) { return false; }
15956            FlexibleInstrumentUpdate_Print((emdi12::FlexibleInstrumentUpdate&)(msg), str);
15957            return true;
15958        }
15959        case 98: {
15960            if (sizeof(emdi12::InstrumentStateChange) > msg_len) { return false; }
15961            InstrumentStateChange_Print((emdi12::InstrumentStateChange&)(msg), str);
15962            return true;
15963        }
15964        case 99: {
15965            if (sizeof(emdi12::MassInstrumentStateChange) > msg_len) { return false; }
15966            MassInstrumentStateChange_Print((emdi12::MassInstrumentStateChange&)(msg), str);
15967            return true;
15968        }
15969        case 97: {
15970            if (sizeof(emdi12::ProductStateChange) > msg_len) { return false; }
15971            ProductStateChange_Print((emdi12::ProductStateChange&)(msg), str);
15972            return true;
15973        }
15974        case 95: {
15975            if (sizeof(emdi12::QuoteRequest) > msg_len) { return false; }
15976            QuoteRequest_Print((emdi12::QuoteRequest&)(msg), str);
15977            return true;
15978        }
15979        case 120: {
15980            if (sizeof(emdi12::Reset) > msg_len) { return false; }
15981            Reset_Print((emdi12::Reset&)(msg), str);
15982            return true;
15983        }
15984        case 516: {
15985            if (sizeof(emdi12::ScaledSimpleInstrumentUpdate) > msg_len) { return false; }
15986            ScaledSimpleInstrumentUpdate_Print((emdi12::ScaledSimpleInstrumentUpdate&)(msg), str);
15987            return true;
15988        }
15989        case 512: {
15990            if (sizeof(emdi12::TopOfBookImplied) > msg_len) { return false; }
15991            TopOfBookImplied_Print((emdi12::TopOfBookImplied&)(msg), str);
15992            return true;
15993        }
15994        default:
15995
15996        return false;
15997    }
15998}
15999
16000// --- emdi12.TemplateHeaderMsgs..ReadStrptr
16001// Parse ascii representation of message into binary, appending new data to BUF.
16002emdi12::TemplateHeaderMsgsCase emdi12::TemplateHeaderMsgs_ReadStrptr(algo::strptr str, algo::ByteAry &buf) {
16003    bool ok = false;
16004    tempstr msgtype_str;
16005    algo::StringIter iter(str);
16006    cstring_ReadCmdarg(msgtype_str, iter, false); // read first word
16007    emdi12::TemplateHeaderMsgsCase msgtype;
16008    value_SetStrptrMaybe(msgtype, msgtype_str); // map string -> enum
16009    switch (value_GetEnum(msgtype)) { // what message is it?
16010        case emdi12_TemplateHeaderMsgsCase_emdi12_Beacon: {
16011            int len = sizeof(emdi12::Beacon);
16012            emdi12::Beacon *ctype = new(ary_AllocN(buf, len).elems) emdi12::Beacon; // default values
16013            ok = Beacon_ReadStrptrMaybe(*ctype, str); // now read attributes
16014        } break; // emdi12::Beacon case
16015
16016        case emdi12_TemplateHeaderMsgsCase_emdi12_ComplexInstrumentUpdate: {
16017            int len = sizeof(emdi12::ComplexInstrumentUpdate);
16018            emdi12::ComplexInstrumentUpdate *ctype = new(ary_AllocN(buf, len).elems) emdi12::ComplexInstrumentUpdate; // default values
16019            algo::ByteAry varlenbuf;
16020            algo::ByteAry *varlenbuf_save = algo_lib::_db.varlenbuf;
16021            algo_lib::_db.varlenbuf = &varlenbuf;
16022            ok = ComplexInstrumentUpdate_ReadStrptrMaybe(*ctype, str); // now read attributes
16023            len += ary_N(varlenbuf);
16024            ctype->length = u32(len);
16025            ary_Addary(buf, ary_Getary(varlenbuf));
16026            algo_lib::_db.varlenbuf = varlenbuf_save;
16027        } break; // emdi12::ComplexInstrumentUpdate case
16028
16029        case emdi12_TemplateHeaderMsgsCase_emdi12_CrossRequest: {
16030            int len = sizeof(emdi12::CrossRequest);
16031            emdi12::CrossRequest *ctype = new(ary_AllocN(buf, len).elems) emdi12::CrossRequest; // default values
16032            ok = CrossRequest_ReadStrptrMaybe(*ctype, str); // now read attributes
16033        } break; // emdi12::CrossRequest case
16034
16035        case emdi12_TemplateHeaderMsgsCase_emdi12_DepthIncremental: {
16036            int len = sizeof(emdi12::DepthIncremental);
16037            emdi12::DepthIncremental *ctype = new(ary_AllocN(buf, len).elems) emdi12::DepthIncremental; // default values
16038            algo::ByteAry varlenbuf;
16039            algo::ByteAry *varlenbuf_save = algo_lib::_db.varlenbuf;
16040            algo_lib::_db.varlenbuf = &varlenbuf;
16041            ok = DepthIncremental_ReadStrptrMaybe(*ctype, str); // now read attributes
16042            len += ary_N(varlenbuf);
16043            ctype->length = u32(len);
16044            ary_Addary(buf, ary_Getary(varlenbuf));
16045            algo_lib::_db.varlenbuf = varlenbuf_save;
16046        } break; // emdi12::DepthIncremental case
16047
16048        case emdi12_TemplateHeaderMsgsCase_emdi12_DepthSnapshot: {
16049            int len = sizeof(emdi12::DepthSnapshot);
16050            emdi12::DepthSnapshot *ctype = new(ary_AllocN(buf, len).elems) emdi12::DepthSnapshot; // default values
16051            algo::ByteAry varlenbuf;
16052            algo::ByteAry *varlenbuf_save = algo_lib::_db.varlenbuf;
16053            algo_lib::_db.varlenbuf = &varlenbuf;
16054            ok = DepthSnapshot_ReadStrptrMaybe(*ctype, str); // now read attributes
16055            len += ary_N(varlenbuf);
16056            ctype->length = u32(len);
16057            ary_Addary(buf, ary_Getary(varlenbuf));
16058            algo_lib::_db.varlenbuf = varlenbuf_save;
16059        } break; // emdi12::DepthSnapshot case
16060
16061        case emdi12_TemplateHeaderMsgsCase_emdi12_EMDPacketHeader: {
16062            int len = sizeof(emdi12::EMDPacketHeader);
16063            emdi12::EMDPacketHeader *ctype = new(ary_AllocN(buf, len).elems) emdi12::EMDPacketHeader; // default values
16064            ok = EMDPacketHeader_ReadStrptrMaybe(*ctype, str); // now read attributes
16065        } break; // emdi12::EMDPacketHeader case
16066
16067        case emdi12_TemplateHeaderMsgsCase_emdi12_FlexibleInstrumentUpdate: {
16068            int len = sizeof(emdi12::FlexibleInstrumentUpdate);
16069            emdi12::FlexibleInstrumentUpdate *ctype = new(ary_AllocN(buf, len).elems) emdi12::FlexibleInstrumentUpdate; // default values
16070            ok = FlexibleInstrumentUpdate_ReadStrptrMaybe(*ctype, str); // now read attributes
16071        } break; // emdi12::FlexibleInstrumentUpdate case
16072
16073        case emdi12_TemplateHeaderMsgsCase_emdi12_InstrumentStateChange: {
16074            int len = sizeof(emdi12::InstrumentStateChange);
16075            emdi12::InstrumentStateChange *ctype = new(ary_AllocN(buf, len).elems) emdi12::InstrumentStateChange; // default values
16076            ok = InstrumentStateChange_ReadStrptrMaybe(*ctype, str); // now read attributes
16077        } break; // emdi12::InstrumentStateChange case
16078
16079        case emdi12_TemplateHeaderMsgsCase_emdi12_MassInstrumentStateChange: {
16080            int len = sizeof(emdi12::MassInstrumentStateChange);
16081            emdi12::MassInstrumentStateChange *ctype = new(ary_AllocN(buf, len).elems) emdi12::MassInstrumentStateChange; // default values
16082            algo::ByteAry varlenbuf;
16083            algo::ByteAry *varlenbuf_save = algo_lib::_db.varlenbuf;
16084            algo_lib::_db.varlenbuf = &varlenbuf;
16085            ok = MassInstrumentStateChange_ReadStrptrMaybe(*ctype, str); // now read attributes
16086            len += ary_N(varlenbuf);
16087            ctype->length = u32(len);
16088            ary_Addary(buf, ary_Getary(varlenbuf));
16089            algo_lib::_db.varlenbuf = varlenbuf_save;
16090        } break; // emdi12::MassInstrumentStateChange case
16091
16092        case emdi12_TemplateHeaderMsgsCase_emdi12_ProductStateChange: {
16093            int len = sizeof(emdi12::ProductStateChange);
16094            emdi12::ProductStateChange *ctype = new(ary_AllocN(buf, len).elems) emdi12::ProductStateChange; // default values
16095            ok = ProductStateChange_ReadStrptrMaybe(*ctype, str); // now read attributes
16096        } break; // emdi12::ProductStateChange case
16097
16098        case emdi12_TemplateHeaderMsgsCase_emdi12_QuoteRequest: {
16099            int len = sizeof(emdi12::QuoteRequest);
16100            emdi12::QuoteRequest *ctype = new(ary_AllocN(buf, len).elems) emdi12::QuoteRequest; // default values
16101            ok = QuoteRequest_ReadStrptrMaybe(*ctype, str); // now read attributes
16102        } break; // emdi12::QuoteRequest case
16103
16104        case emdi12_TemplateHeaderMsgsCase_emdi12_Reset: {
16105            int len = sizeof(emdi12::Reset);
16106            emdi12::Reset *ctype = new(ary_AllocN(buf, len).elems) emdi12::Reset; // default values
16107            ok = Reset_ReadStrptrMaybe(*ctype, str); // now read attributes
16108        } break; // emdi12::Reset case
16109
16110        case emdi12_TemplateHeaderMsgsCase_emdi12_ScaledSimpleInstrumentUpdate: {
16111            int len = sizeof(emdi12::ScaledSimpleInstrumentUpdate);
16112            emdi12::ScaledSimpleInstrumentUpdate *ctype = new(ary_AllocN(buf, len).elems) emdi12::ScaledSimpleInstrumentUpdate; // default values
16113            ok = ScaledSimpleInstrumentUpdate_ReadStrptrMaybe(*ctype, str); // now read attributes
16114        } break; // emdi12::ScaledSimpleInstrumentUpdate case
16115
16116        case emdi12_TemplateHeaderMsgsCase_emdi12_TopOfBookImplied: {
16117            int len = sizeof(emdi12::TopOfBookImplied);
16118            emdi12::TopOfBookImplied *ctype = new(ary_AllocN(buf, len).elems) emdi12::TopOfBookImplied; // default values
16119            algo::ByteAry varlenbuf;
16120            algo::ByteAry *varlenbuf_save = algo_lib::_db.varlenbuf;
16121            algo_lib::_db.varlenbuf = &varlenbuf;
16122            ok = TopOfBookImplied_ReadStrptrMaybe(*ctype, str); // now read attributes
16123            len += ary_N(varlenbuf);
16124            ctype->length = u32(len);
16125            ary_Addary(buf, ary_Getary(varlenbuf));
16126            algo_lib::_db.varlenbuf = varlenbuf_save;
16127        } break; // emdi12::TopOfBookImplied case
16128
16129        default: break;
16130    }
16131    return ok ? msgtype : emdi12::TemplateHeaderMsgsCase();
16132}
16133
16134// --- emdi12.TemplateHeaderMsgs..ReadStrptrMaybe
16135// Parse ascii representation of message into binary, appending new data to BUF.
16136bool emdi12::TemplateHeaderMsgs_ReadStrptrMaybe(algo::strptr str, algo::ByteAry &buf) {
16137    emdi12::TemplateHeaderMsgsCase msgtype = TemplateHeaderMsgs_ReadStrptr(str,buf);
16138    return !(msgtype == emdi12::TemplateHeaderMsgsCase());
16139}